android - 为什么需要 gradle build packagingOptions?

标签 android gradle android-gradle-plugin build.gradle

在我的 gradle 文件中,我有以下内容:

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE'
}

根据文档:

/**
 * Adds an excluded paths.
 * @param path the path, as packaged in the APK
 */

这是什么意思?谁能给我一个真实的例子来说明为什么需要进行这些排除?

最佳答案

如果您将几个 aar 文件的扩展名更改为 zip 并最终打开它们,您将得到两个包含文件的 aar 文件具有相同的路径。

SomeDependency-A.aar
-META-INF/LICENSE
...

SomeDependency-B.aar
-META-INF/LICENSE
...

aar 依赖项被合并时,它失败了,因为它试图添加文件 LICENSE 而它已经存在。

我们通过排除重复文件来解决这个问题

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}

关于android - 为什么需要 gradle build packagingOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417464/

相关文章:

android - 解决错误: all support libraries must use the exact same version的正确方法

使用smack的android文件传输

Android:手机重启后恢复应用程序变量

Java 屏幕保护程序加载错误的主类,有什么想法吗?

android - Gradle 不会自动将 jar 添加到项目中

android - 为什么 "Offline work"让 Gradle Build 在 Android Studio 中运行得更快?

android - 线性布局在设计中可见但在运行时不可见?

Android截屏图片

java - 无法获取 org.gradle.api.Project 类型的根项目 'artifactory_contextUrl' 的未知属性 '[redacted]'

android-studio - 配置项目 ':game' 时出现问题。 > java.lang.NullPointerException(无错误信息)