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

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

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

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

我该怎么办

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

  • 直接在 c++ 主文件中添加一个方法,然后从 Java 中调用它?

我曾尝试使用 JNI 重新包装内容,但它似乎绝对行不通。我不断收到 UnsatisfiedLinkError

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

最佳答案

JNA 提供了一个 stub native ​​库,libjnidispatch.so适用于各种平台。您可以自己构建此库,或从项目的 lib/native/<platform>.jar 中提取预构建的二进制文件之一。包。

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

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

关于android - 我如何使用 JNA 从 Android 调用 C/C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179833/

相关文章:

Android EditText : Done instead of Enter or Word Wrap instead of Multi Line

android - 使用 onNavigationItemSelected() 在抽屉导航中切换 fragment

c++ - 位域的完美转发解决方法

可以在 NDK c 应用程序中调用在内核驱动程序中定义的函数吗?

android - 如何将变量传入和传出 AsyncTasks?

安卓谷歌地图。在 Locationchange 上计算移动距离并在 textview 中显示。

c++ - 未记录的 C++ 预处理器指令 (MSVC 2013u4)

c++ - 未找到共享对象但存在于链接器目录中

android - armeabi 和 armeabi-v7a 的区别

android - Android 应用程序中 native cpp 函数的 UnsatisfiedLinkError (ndk)