Android 为什么需要gradle build PackageOptions?

Android 为什么需要gradle build PackageOptions?,android,build.gradle,Android,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 */ 这是什么意思?有人能给我一个真实的例子说明

在我的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
依赖项时,它会失败,因为它试图添加文件
许可证
,并且该文件已经存在

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

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

如果2+个库包含这些文件,您将得到生成冲突。由于您的APK中不需要这些文件,典型的解决方案是将它们排除在外。在
android{buildTypes{packagingpoptions{…}}}
vs
android{packagingpoptions{…}}
下设置此选项与
android{packagingpoptions{…}}
块上的
packagingpoptions
闭包不可用。您可以通过将新的
buildType
放置在那里来创建它