我有那个项目结构:
-gradle root
|-clients
|-client 1
|-client 2
...
|-client N
|-libs
|-android lib 1
|-android lib 2
...
|-android lib N
|-java lib 1
|-java lib 2
...
|-java lib N
在每个客户端构建文件中,我都有packagingOptions
来排除选项。
这样的事情:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
我如何优化该块并将其移动到例如我的根gradle构建文件中? 我真的不想将其粘贴到所有客户端。
答案 0 :(得分:11)
找到解决方案。 致谢:https://github.com/frankdu/android-gradle-dagger-tutorial
我已经创建了单独的构建文件并在那里移动了那些设置。 文件android_common.gradle
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
然后在每个客户端放置该行:
apply from: "${rootDir}/android_common.gradle"
最后从我的客户端构建文件中排除了packagingOptions。 另外,我在那里移动了另一种常见配置。 之后看起来干净,简单,漂亮。
答案 1 :(得分:1)
为记录起见,您的大多数包装选项已经是默认选项。
请参见PackagingOptions Gradle documentation
Pick first: none
Merge: /META-INF/services/**
Exclude:
/META-INF/LICENSE
/META-INF/LICENSE.txt
/META-INF/NOTICE
/META-INF/NOTICE.txt
/LICENSE
/LICENSE.txt
/NOTICE
/NOTICE.txt
/META-INF/*.DSA (all DSA signature files)
/META-INF/*.EC (all EC signature files)
/META-INF/*.SF (all signature files)
/META-INF/*.RSA (all RSA signature files)
/META-INF/maven/** (all files in the maven meta inf directory)
/META-INF/proguard/* (all files in the proguard meta inf directory)
**/.svn/** (all .svn directory contents)
**/CVS/** (all CVS directory contents)
**/SCCS/** (all SCCS directory contents)
**/.* (all UNIX hidden files)
**/.*/** (all contents of UNIX hidden directories)
**/*~ (temporary files)
**/thumbs.db
**/picasa.ini
**/protobuf.meta
**/about.html
**/package.html
**/overview.html
**/_*
**/_*/**