【问题标题】:Android apk - How to exclude a .so file from a 3rd party dependency using gradleAndroid apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件
【发布时间】: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 中吗?

我已尝试打包选项/排除,但没有结果:有问题的文件夹仍然存在。

【问题讨论】:

    标签: android gradle


    【解决方案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' 如果我们需要排除特定的依赖项怎么办。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多