如何使用JNA从Android调用C / C ++代码?

时间:2015-05-12 00:35:15

标签: android c++ android-ndk java-native-interface jna

我正在尝试将此特定库集成到我的Android项目中,并且该库是用C / C ++编写的。我奇迹般地得到ndk-build给我所需的.so档案。

然而,看一下,项目中有一个示例,他们使用一个神秘的.jar.c / c++文件的API绑定。

我如何

  • 根据.jar创建这个包含API的特殊.so文件?

OR

  • 直接将方法添加到主c++文件,然后从Java调用它?

我尝试使用JNI重新包装东西,但它似乎无法正常工作。我一直在UnsatisfiedLinkError

许多在线文档使用jni作为教程。我很高兴只有一些指向JNA教程的链接。

2 个答案:

答案 0 :(得分:7)

JNA为各种平台提供了一个存根本机​​库libjnidispatch.so。您可以自己构建此库,也可以从项目的lib/native/<platform>.jar包中提取一个预先构建的二进制文件。

您在Android项目中包含libjnidispatch.so的方式与任何其他JNI库一样。这是必需的;您不能像其他平台那样依赖JNA动态解压缩和使用其本机库。 JNA项目includes details for doing so(以及自己构建libjnidispatch.so的说明)。

然后像使用任何其他Java jar文件一样使用jna.jar,并编写自己的(Java)映射以匹配您尝试访问的本机库。还有一个jna-min.jar,它省略了jna.jar中通常捆绑的所有本机平台库。

答案 1 :(得分:0)

转到项目属性并构建路径并删除JNA 4.0及相关类。 这将有效!