在我看来,gradle Android插件没有将版本化的.so库包含到.aar存档中。
我的情况:
我需要在需要另一个库的Android应用程序中加载一些库:libz.so.1
我的本机库目录中确实有libz.so
和libz.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.so
和libs.so.1
库。只有libz.so
被汇编到.aar文件中。
此页面:https://developer.android.com/studio/projects/android-library#aar-contents
建议我仅支持/jni/abi_name/name.so
模式。
期待一些帮助。