如何使用Gradle将Android配置注入每个子项目?

时间:2014-01-09 22:09:07

标签: android gradle android-gradle

而不是在每个子项目中复制android配置块:

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()......”

1 个答案:

答案 0 :(得分:17)

对此的解决方案原来是:

subprojects{
    afterEvaluate {
        android {
            compileSdkVersion 19
            buildToolsVersion "19.0.0"

            defaultConfig {
                minSdkVersion 9
                targetSdkVersion 14
            }
        }
    }
}

据我所知,这是因为在评估时处理/使用android {...}意味着它必须存在(即明确写入或包含为“应用插件”的一部分)它命中根构建文件中的子项目。而且,更准确地说,这意味着顶级项目必须定义它(它可能不会因为它可能不是'android'或'android-library'构建本身)。但是,如果我们在评估之后将其推迟,那么它可以直接使用每个子项目中可用的内容。

这个问题+解决方案还假设所有子项目都是某种形式的android项目(在我的情况下是真的,但不一定是其他的)。 更安全的答案是使用:

subprojects{
    afterEvaluate {
        if(it.hasProperty('android')){
            android {
                compileSdkVersion 19
                buildToolsVersion "19.0.0"

                defaultConfig {
                    minSdkVersion 9
                    targetSdkVersion 14
                }
            }
        }
    }
}