如何从Gradle项目依赖项中排除重复的本机库?

时间:2017-09-07 18:37:49

标签: android gradle java-native-interface android-gradle build.gradle

我有两个适用于Android的Gradle模块,一个是库,一个是应用程序,应用程序依赖于模块,如下所示:compile project(path ':library' configuration: 'debug')

问题是两个模块都使用JNI,因此它们都打包libc++_shared.so  来自NDK,导致:

com.android.build.api.transform.TransformException:
com.android.builder.packaging.DuplicateFileException:
Duplicate files copied in APK lib/armeabi-v7a/libc++_shared.so

我尝试使用packagingOptions,但似乎我只能使用它来完全排除该文件的打包,而不仅仅是从其他模块复制?

1 个答案:

答案 0 :(得分:2)

您尝试使用哪种类型的packagingOptions?可能是exlude?看起来pickFirst应该适合您。在这种情况下,您明确告诉Gradle您知道该问题并接受任何这些文件。根据您支持的体系结构,您可能只需要一些行。您可以找到详细信息in documentation

android {

 // some stuff
 packagingOptions {
        pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
        pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
        pickFirst 'lib/x86_64/libgnustl_shared.so'
        pickFirst 'lib/x86/libgnustl_shared.so'
    }
}