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

问题描述 投票:6回答:3

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

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

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

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

android gradle shared-libraries apk native
3个回答
2
投票

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

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

让我知道这个是否奏效!


1
投票

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

最好的办法是通过重命名库并在链接之前更改其内部soname来完全删除该版本。


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.