我有一个带有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
?如果我能提供任何可能有帮助的具体信息,请在评论中告诉我。
答案 0 :(得分:2)
我认为,在您的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
并检查它是否最终被复制
答案 1 :(得分:0)
我认为你的 libgnustl_shared.so 需要 / armeabi-v7a 不在 / armeabi
下请尝试将 libgnustl_shared.so 复制到 / armeabi-v7a
答案 2 :(得分:0)
请看这里的答案:How to link any library in ndk application 问题很可能出在Android.mk文件中。你应该有一个像底部的那条线:
include $(BUILD_SHARED_LIBRARY)
如果没有,那么您不会包含共享库。