为什么没有从我的APK复制libgnustl_shared.so?



我有一个android项目,libs文件夹结构如下:

/libs
  /armeabi
    libfoo.so
    libbar.so
    libmystuff.so
    libgnustl_shared.so
  /armeabi-v7a
    libfoo.so
    libbar.so

foobar是第三方库,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时。因此,您引用的是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)

最新更新