【发布时间】:2013-04-22 12:38:22
【问题描述】:
我有一个带有 libs 文件夹结构的 android 项目,如下所示:
/libs
/armeabi
libfoo.so
libbar.so
libmystuff.so
libgnustl_shared.so
/armeabi-v7a
libfoo.so
libbar.so
foo 和 bar 是第三方库,mystuff 是我自己的库,来自一个单独的 android JNI 项目,它需要来自同一个 JNI 项目的gnustl_shared。
当我在 Eclipse 中构建我的项目时,我可以使用unzip -l 查看生成的 APK 的内容,它确实表明所有这些库文件都已包含在内。
但是,安装 APK 后,/data/data/com.myproject/lib 文件夹不包含 libgnustl_shared.so,即使存在其他库。
这不可避免地会导致以下错误:
UnsatisfiedLinkError: Couldn't load gnustl_shared: findLibrary returned null
作为健全性检查,我运行了adb push ./libs/armeabi/libgnustl_shared.so /data/data/com.myproject/lib,果然,应用程序按预期启动。
我在构建日志或 Eclipse 控制台中没有看到任何表明构建或安装应用程序存在任何问题的信息。
- 什么可能会阻止
libgnustl_shared.so与我的应用程序一起安装? - 我可以去哪里了解安装 APK 后会发生什么?
如果我可以提供任何可能有帮助的具体信息,请在评论中告诉我。
【问题讨论】:
-
仔细检查 mainfest 中包含所有库的语句。
-
@RobertRowntree -- 你能解释一下你的意思吗?我从来不需要在
AndroidManifest.xml中为其他项目指定库,如果这就是你所指的。 -
这是为了引用您有权访问的其他 Android 库项目。我所拥有的是一些
.jar文件和一些.so文件的组合。我的project.properties文件没有引用其他库项目,但libfoo、libbar和libmystuff都已正确安装。唯一缺少的库是libgnustl_shared。 NDK 开发绝非一帆风顺。 :[ -
stackoverflow.com/questions/14687287/… 请点击已接受答案下的链接,了解在设备上的 apk“解包”期间发生的情况以及为什么必须手动复制共享库
标签: android android-ndk java-native-interface