如何使用Gradle将Android配置注入每个子项目?
不要在每个子项目中重复android配置块:如何使用Gradle将Android配置注入每个子项目?,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,不要在每个子项目中重复android配置块: android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 9 targetSdkVersion 14 } } 我更愿意将其放在顶级/根gradle构建文件中,如: subprojects{ android { compileSdkVersion
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 14
}
}
我更愿意将其放在顶级/根gradle构建文件中,如:
subprojects{
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 14
}
}
}
但是,这不起作用(
错误:
“。找不到参数的方法android()。”解决方案是:
subprojects{
afterEvaluate {
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 14
}
}
}
}
据我所知,这是因为在评估时处理/使用android{…}意味着它必须在根构建文件中的子项目中出现(即显式编写或作为“应用插件”的一部分包含)。更准确地说,这意味着顶级项目必须定义它(这可能不是,因为它本身可能不是“android”或“android库”构建)。但是,如果我们在评估之后将其推到,那么它可以直接使用每个子项目中可用的内容
这个问题+解决方案还假设所有子项目都是某种形式的android项目(在我的例子中是真的,但不一定是其他的)。
更安全的答案是使用:
subprojects{
afterEvaluate {
if(it.hasProperty('android')){
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 14
}
}
}
}
}
这在其他方面工作得很好,但这样子项目就无法覆盖默认值。在设置值之前,您应该检查compileSdkVersion和buildToolsVersion是否存在。为True,但另一方面,如果有人意外尝试覆盖子项目中的内容,他们将无法逃脱;)由于某些原因,Android Gradle Plugin 3.5.2不接受这一点,但抱怨子模块不包含CompileSDK版本(以及我尝试定义的所有其他版本)