我有一个带有 libs
文件夹结构的 android 项目,如下所示:
/libs
/armeabi
libfoo.so
libbar.so
libmystuff.so
libgnustl_shared.so
/armeabi-v7a
libfoo.so
libbar.so
foo
和 bar
是第三方库,mystuff
是我自己的库,来自一个单独的 android JNI 项目,它需要 gnuSTL_shared
,来自同一个 JNI 项目。
当我在 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 时发生的情况?
如果我可以提供任何可能有帮助的具体信息,请在评论中告诉我。
最佳答案
我认为,在您的 JNI 项目的 Android.mk 文件中,很可能在您构建 libmystuff.so 时,您正在引用 libgnuSTL_shared.so,例如:
LOCAL_LDLIBS += -lgnustl_shared
也许你可以尝试将它添加为一个模块(NDK 工作真正专注于模块),比如:
include $(CLEAR_VARS)
LOCAL_MODULE := gnustl_shared
LOCAL_SRC_FILES := libgnustl_shared.so
include $(PREBUILT_SHARED_LIBRARY)
和(在您正在构建 libmystuff.so 的部分中):
LOCAL_SHARED_LIBRARIES := gnustl_shared
并检查它是否最终被复制
关于android - 为什么没有从我的 APK 中复制 libgnuSTL_shared.so?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147325/