如何在 build.gradle 的 android 部分使用变量?

moh*_*eli 6 android gradle

基于这个答案,我意识到我们可以使用 Gradle 变量(当然我不熟悉 Gradle,所以请原谅我的术语)在许多 Android 项目中保持一些一致性。

例如,我想更改android闭包配置:

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

对此:

android {
    compileSdkVersion configurationVariables.sdk
    buildToolsVersion configurationVariables.buildToolsVersion    
  defaultConfig {
        minSdkVersion configurationVariables.minSdk
        targetSdkVersion configurationVariables.targetSdk
        versionCode 1
        versionName "1.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

错误:(5, 0) 启动失败:构建文件“path_to_android\build.gradle”:5:构建脚本中不得使用语句标签。如果您尝试配置名为“buildToolsVersion”的属性,请将“:”替换为“=”或“ ”,否则不会达到预期的效果。@第5行,第24列。buildToolsVersion:configurationVariables.buildToolsVersion

如何使用变量来集中跨项目和模块的构建配置?

更新:我的定义configurationVariables如下:

ext {

    configurationVariables = [
            sdk = 27,
            buildToolsVersion = "27.0.3",
            minSdk = 16,
            targetSdk = 27
    ]
}
Run Code Online (Sandbox Code Playgroud)

我将其写入一个config.gradle文件中,然后将apply from其导入到根项目build.gradle中,以将其应用于所有子项目。

ved*_*ved 1

您的配置文件结构将值存储为变量。一般来说这个结构是用来存储变量的。你的配置文件应该是这样的

ext {


        sdk = 27
        buildToolsVersion = "27.0.3"
        minSdk = 16
        targetSdk = 27

}
Run Code Online (Sandbox Code Playgroud)

你使用这个变量作为

compileSdkVersion sdk buildToolsVersion buildToolsVersion

我没有使用数组来存储此变量,但正如您在另一个答案链接中给出的那样,它们使用冒号(:) 存储数组变量,并且您直接存储值。我不确定,但如果你想使用数组,请尝试使用这样的冒号:

ext {
configurationVariables = [
        sdk : 27,
        buildToolsVersion : "27.0.0",
        minSdk : 16,
        targetSdk : 27
]
}
Run Code Online (Sandbox Code Playgroud)