如何使用Gradle将版本化的* .so文件包含到apk中?

时间:2017-03-15 15:02:33

标签: android gradle shared-libraries apk native

我尝试使用一些预编译的本机库构建android应用程序: liba.so libb.so.1.2.3

将库放入jniLibs子目录中。 构建APK文件后,其中只包含 liba.so ,但 libb.so.1.2.3

结果是可预测的。应用程序在开始时崩溃。

如何处理构建脚本以将jniLibs中的所有文件包含到APK中?

3 个答案:

答案 0 :(得分:2)

不幸的是我不再为Android开发了,所以我无法测试这个,但我知道Gradle,这可能适合你。查看Android DSL docs,您可以更改jniLibs文件夹中的过滤:

android {
    sourceSets {
        main {
            jniLibs.filter.include("**/*")
        }
    }
}

让我知道这是否有效!

答案 1 :(得分:1)

由于Android Gradle plugin中使用了本机正则表达式^.+\\.so$,因此无法使用.so文件夹包含除jniLibs文件以外的任何内容。而且,即使您要以某种方式将库添加到APK,Android上的动态加载程序也是very limited,并且很可能无法加载它们。

您最好的选择是,通过重命名该库并更改其内部soname 链接之前,完全删除该版本。

答案 2 :(得分:-1)

只需将jniLibs文件夹添加到app / src / main中,它将在apk中包含.so文件。

/ app / src / main / armeabi / *。so文件