android - 为什么没有从我的 APK 中复制 libgnuSTL_shared.so?

标签 android android-ndk java-native-interface

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

/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.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/

相关文章:

android - 在android ndk中链接so文件

java - 处理 JVM 崩溃

Android beta APK 分发问题

java - Jackson 无法反序列化为 ForeignCollection (Ormlite)

android - libSTLport_static.a : No such file: Permission denied

java - Windows下JNI和C入门

java - 默认情况下在哪里安装本地Java库?

java - android 到 sqlserver 的连接字符串

android - 是否在后台重复处理?

android - 是否可以在显示之前处理 camerax 预览的数据?