我已经制作了一个使用某些 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库项目”:

10-07 19:15
查看更多