小编Bre*_*ley的帖子

在运行时加载多个共享库在Android中不起作用

我正在使用cmake在Android Studio中创建我的共享库.库正确构建和链接,我能够在lib/armeabi-v7a下的Apk中看到我的所有库.

这些库链接如下:

  • LIB1
    • LIB2
      • LIB3
        • LIB4
        • Lib5

我通过拨打电话来加载我的Lib1 System.loadLibrary("lib1");

我能够拨打电话到LIB1,但只要LIB1试图访问LIB2,我得到未加载传播的消息说LIB2.

然后我想我必须加载其他库,所以我做了以下调用但最终得到了相同的传播消息"Lib2 not loaded".

System.loadLibrary("lib5");
System.loadLibrary("lib4");
System.loadLibrary("lib3");
System.loadLibrary("lib2");
System.loadLibrary("lib1");
Run Code Online (Sandbox Code Playgroud)

为什么Lib1无法调用Lib2?是否在导致库加载失败的位置解压缩其他共享库?

我想请注意,在切换到使用cmake之前,我已正确加载了libs.我相信我之前手动编译我的库并将它们存储在我的Android Studio项目的/ jniLibs和/ assets目录中,但那是不久之前所以我的内存在细节上并不清楚.

java-native-interface android cmake shared-libraries

6
推荐指数
1
解决办法
442
查看次数

切换到较新版本的android ndk时未定义的模块

我正在尝试从ndk-r11c升级到ndk-r14.当我运行r14时,我收到错误

Android NDK:模块myJNI依赖于模块:png jpeg log

在我的Android make中:LOCAL_SHARED_LIBRARIES:= png jpeg log

java-native-interface android shared-libraries android-ndk

5
推荐指数
1
解决办法
8164
查看次数

更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后,nativeLibraryDir 显示为空

将 Gradle 从 5.4.1 更新到 5.6.4 并将 Android Studio 从 3.5.3 更新到 3.6.1 后,nativeLibraryDir 中似乎不再存在我的库。我当前访问库的实现如下:

File libDirectory = new File(context.getApplicationInfo().nativeLibraryDir);
String files[] = libDirectory.list();
Run Code Online (Sandbox Code Playgroud)

在更新之前,我可以调试并看到“文件”数组包含预期的所有库的列表。更新后,“文件”数组显示为空。

我已经分析了我的 APK 并确认包中确实存在这些库。

我是否以一种糟糕的方式检索路径?是否存在我不知道的所需权限?我正在使用 CMake 来构建我的库:

externalNativeBuild {
    cmake {
        path '../../../common/CMakeLists.txt'
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 NDK 版本 21.0.6113669

更新:恢复到 NDK r19c 会产生相同的结果

更新:更新前后libDirectory解析为/data/app/com.example.application-1/lib/arm

更新:android.useNewApkCreator=falsegradle.properties 中的设置会产生相同的结果

更新:使用设备文件资源管理器,我可以在更新之前查看 lib/arm/ 文件夹中的库。更新后,lib/arm/ 文件夹的大小仍然相同(4KB),但我无法再查看该文件夹中的内容。文件夹权限似乎没有变化。

android native gradle android-ndk

5
推荐指数
2
解决办法
2010
查看次数