将具有特定版本的本机 .so 库包含到 Android .aar 存档中

Rus*_*ken 7 android shared-libraries android-ndk android-gradle-plugin

在我看来,gradle Android 插件没有将版本化的 .so 库包含到 .aar 存档中。

我的情况:我需要在需要另一个库的 Android 应用程序中加载一些库: libz.so.1

我确实有libz.solibz.so.1在我的本机库目录中。

运行 gradle 后libz.so,创建的 .aar 存档中只有库。java.lang.UnsatisfiedLinkError: dlopen failed: library "libz.so.1" not found当我尝试运行我的应用程序时,它会导致异常。

看起来我otherlibrary只尝试加载特定版本的 libz。

readelf -d otherlibrary.so 还告诉我它想要特定的库: 0x00000001 (NEEDED) Shared library: [libz.so.1]

我要加载的两个库都是第三方库。看起来我需要为以下其中一项找到一种方法:

  • 打包libz.so.1到 .aar 存档中,因此otherlibrary.so可以轻松与之链接
  • 加载libz.so并以某种方式otherlibrary.so与它链接

但我的想法不多了,该怎么做。

构建 .aar 存档的 build.gradle 的一部分:

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}
Run Code Online (Sandbox Code Playgroud)

libs目录包含libz.solibs.so.1库。只有libz.so汇编成.aar 文件。

此页面:https : //developer.android.com/studio/projects/android-library#aar-contents 建议我只/jni/abi_name/name.so支持模式。

期待一些帮助。