我有一个android项目,libs
文件夹结构如下:
/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控制台中没有看到任何提示构建或安装应用程序有任何问题的内容。
- 什么可以阻止
- 我可以去哪里了解安装APK时会发生什么?
libgnustl_shared.so
与我的应用程序一起安装?请在评论中告诉我,如果有任何我可以提供的具体信息可能会有所帮助。
我认为,在你的JNI项目的Android。Mk文件,最有可能的是,当您构建libmystuff时。因此,您引用的是libgnustl_shared。就像:
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
检查是否最终复制完成
我认为你的libgnustl_shared。所以需要在/armeabi-v7a下,而不是/armeabi
请尝试复制libgnustl_shared。so to /armeabi-v7a
看看这里的答案:如何在ndk应用程序中链接任何库问题很可能出在你的安卓系统上。可文件。你应该有像下面这样的一行:
include $(BUILD_SHARED_LIBRARY)