Android apk - 如何使用gradle从第三方依赖项中排除.so文件

时间:2016-05-23 03:05:16

标签: android gradle

我有一个带有几个依赖项的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中吗?

我尝试过packagingOptions / exclude,但没有结果:问题中的文件夹仍然存在。

1 个答案:

答案 0 :(得分:30)

尝试一个干净的构建,我没有,它仍然从上一个版本中获取文件。为了确定,我最终删除了我的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