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

时间:2019-03-11 16:58:31

标签: android android-ndk android-gradle shared-libraries

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

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

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

运行gradle之后,在创建的.aar存档中只有libz.so库。 当我尝试运行应用程序时,会导致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与之链接

但是我没有足够的想法,怎么做。

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

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

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

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

期待一些帮助。

0 个答案:

没有答案