Android 为什么需要gradle build PackageOptions?
在我的gradle文件中,我有以下内容: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 */ 这是什么意思?有人能给我一个真实的例子说明
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{…}}}
vsandroid{packagingpoptions{…}}
下设置此选项与android{packagingpoptions{…}}
块上的packagingpoptions
闭包不可用。您可以通过将新的buildType
放置在那里来创建它