为什么需要gradle build packagingOptions?

bd1hkmkf  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(146)

在我的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
 */


这是什么意思?有没有人给予我一个真实的生活例子,说明为什么需要做出这些排除?

dldeef67

dldeef671#

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

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

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

字符串
aar依赖项被合并时,它失败了,因为它试图添加文件LICENSE,而它已经存在。
我们通过排除重复的文件来解决这个问题

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

yfjy0ee7

yfjy0ee72#

对于Kotlin DSL(build.gradle.kts)和Android Gradle Plugin(AGP)版本7.0.0及更高版本,exclude方法被弃用,而支持resources.excludes属性:

android {
  // ...
  packaging { // or packagingOptions in AGP < 8.x
    resources.excludes += "META-INF/LICENSE*"
    resources.excludes += "META-INF/NOTICE.txt"
    // OR
    // resources.excludes += setOf(
    //   "META-INF/LICENSE*",
    //   "META-INF/NOTICE.txt"
    // )
  }
}

字符串

相关问题