【发布时间】:2013-12-14 17:43:04
【问题描述】:
我制作了一个使用一些原生库的 android 库项目。
我已经制作了 jni 包装器并将本机库 (.so) 放在 libs// 文件夹中。原生库使用 cmake 编译,适用于 armeabi、armeabi-v7a、x86 和 mips。
我将这个项目导出到一个 jar 中,并将这个 jar 放入一个“普通”的 android 项目中。然后我将这个项目导出到一个 apk 中,可以看到我的库是捆绑到其中的。
但是,当我安装 apk 时,与设备对应的库不会复制到 /data/data/com.my.app/lib 中,显然,运行应用程序会抱怨找不到库 (UnsatisfiedLinkError)。
我已经搜索了 SO 和所有我能找到的答案,但没有找到解决我问题的答案。
我正在使用 Eclipse,顺便说一句
感谢您的帮助
更新
好的,我已经阅读了 ndk 中的文档并查看了示例,不幸的是,我看不到解决方案。
ndk 将 c 代码构建到共享库中,并将它们放置在项目中的适当位置。但它不会生成任何说明库必须与 apk 一起安装的信息。
我的目标是提供一个 android 库(所以是一个 jar),它可以包含在一个 android 应用程序中。我没有看到我正在做的事情(使用 cmake 编译 c 库并将 jni 和 java 编译的类打包到 jar 中)与使用 android.mk 所做的事情之间的真正区别
如果您发现我遗漏了什么,请随时告诉我(即使很明显)。
谢谢
更新
我做了一个肮脏的 hack:在我的应用程序的 libs 文件夹中,我放置了包含我的类和我的本机库的 jar 文件以及每个拱门的 .so 文件的副本。惊喜,/data/data/com.me.myapp/lib 中没有安装这些库
似乎确认是包装问题。
【问题讨论】:
-
我建议您阅读 NDK 附带的文档。
-
您不能只将库放在 NDK 项目中,您必须将其包含在 Android.mk 文件中 - 有很多关于此的文档以及 SO 上的示例
-
我已经阅读了一些关于如何构建本机库的文档(不是 sdk 的文档)。但显然,我读错了文档。我会看看,稍后再回来。谢谢
-
您是否尝试过直接链接您的 .so 文件而不是将它们放入 jar 中?顺便把它们放进罐子里的目的是什么?
-
这就是我第二次更新的重点:如果我将 .so 直接添加到我的 android 应用程序的 libs 文件夹中,它们将与 apk 一起安装。将 .so 放入 jar 中的目的是只向其他开发人员提供一件东西
标签: android android-ndk apk