我已经制作了一个使用某些 native 库的android库项目。
我已经制作了jni包装器,并将 native lib(.so)放在libs//文件夹中。本地库是使用cmake编译的,用于armeabi,armeabi-v7a,x86和mips。
我将此项目导出到jar中,然后将此jar放入“正常” android项目中。然后,我将该项目导出到apk,可以看到我的库文件已 bundle 到其中。
但是,当我安装apk时,与设备相对应的库未复制到/data/data/com.my.app/lib中,显然,运行该应用会提示找不到库(UnsatisfiedLinkError)。
我已经搜索了SO,在所有可以找到的地方都找不到解决方案的答案。
我正在使用Eclipse,顺便说一句
谢谢你的帮助
更新
好的,我已经阅读了ndk中的文档并看到了示例,但是不幸的是,我看不到解决方案。
ndk将c代码构建到共享库中,并将它们放置在项目中的适当位置。但是,它不会生成任何内容,表明必须与apk一起安装这些库。
我的目标是提供一个可以包含在android应用程序中的android库(所以一个jar)。我看不到我在做什么(使用cmake编译c库并将jni和java编译的类打包到jar中)和android.mk之间的真正区别
如果您看到我所缺少的内容,请随时告诉我(即使很明显)。
谢谢
更新
我做了一个肮脏的hack:在我的应用程序的libs文件夹中,我把包含我的类和 native libs的jar文件以及每个arch的.so文件的副本放了进去。确实,没有在/data/data/com.me.myapp/lib中安装这些库
似乎可以确认这是包装问题。
最佳答案
问题是Android打包系统无法处理JAR中的二进制 Assets 。为了使您的应用程序项目能够找到并包含生成的.so
文件,您需要它将库项目引用为“Android库项目”: