Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件
Posted
技术标签:
【中文标题】Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件【英文标题】:Android apk - How to exclude a .so file from a 3rd party dependency using gradle 【发布时间】:2016-09-19 19:21:39 【问题描述】:我有一个包含多个依赖项的 android 项目。 其中两个(我们称它们为依赖项 A 和 B)具有本机库(.so 文件)。
依赖 A 具有以下架构:arm64-v8a、armeabi、armeabi-v7a、x86 和 x86_64。 依赖B有以下架构:armeabi、x86
因此,当我的应用程序在 armeabi-v7a 设备上运行(例如)并且依赖项 B 调用本机方法时,它无法找到相关的库来获取它(因为它不存在于 armeabi-v7a 文件夹中并且确实不会自动回退到库所在的 armeabi)。
有没有办法解决这个问题? 例如,我可以在我的 build.gradle 文件中添加一些配置,以使 arm64-v8a、armeabi-v7a 和 x86_64 文件夹不集成到我的最终 apk 中吗?
我已尝试打包选项/排除,但没有结果:有问题的文件夹仍然存在。
【问题讨论】:
【参考方案1】:尝试一个干净的构建,我没有,它仍然从以前的构建中提取文件。为了确定,我最终删除了我的 app/build/ 文件夹。
android
packagingOptions
exclude 'lib/armeabi-v7a/libSomeLibYouDontWant.so'
在以前崩溃的应用程序上为我工作。
另一种方法是使用
android
defaultConfig
ndk
abiFilters "armeabi", "x86"
有一些类似的问题可能会有所帮助
Gradle exclude arm64 libs
How to use 32-bit native libraries on 64-bit Android device
【讨论】:
此外,您可以使用以下语法忽略整个 ABI 文件夹,例如,armeabi-v7a
文件夹:exclude "lib/armeabi-v7a/**"
(参见 PackagingOptions)跨度>
这将从项目中完全排除 'lib/armeabi-v7a/libSomeLibYouDontWant.so' 如果我们需要排除特定的依赖项怎么办。以上是关于Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio:如何使用 Gradle 生成签名的 APK?
Bamboo + Android + Gradle:如何生成签名的apk?
Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件