Android gradle build:如何设置全局变量

时间:2014-09-01 07:15:43

标签: gradle android-gradle

如何设置可以从build.gradle和tasks访问的全局变量?

3 个答案:

答案 0 :(得分:72)

设置全局变量

project.ext.set("variableName", value)

要从项目的任何位置访问它:

project.variableName

例如:

project.ext.set("newVersionName", versionString)

然后......

println project.newVersionName

有关详细信息,请参阅:http://www.gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html

修改: 正如Dmitry评论的那样,在新版本中,您可以使用以下简写:

project.ext.variableName = value

答案 1 :(得分:20)

Guy的回答非常好。我只想添加实用的代码。

示例:

项目 build.gradle 中添加以下内容:

project.ext {
    minSdkVersion = 21
    targetSdkVersion = 23
}

并在模块 build.gradle 中添加类似内容以访问它:

    defaultConfig {
        minSdkVersion.apiLevel project.minSdkVersion
        targetSdkVersion.apiLevel project.targetSdkVersion
    }

答案 2 :(得分:1)

此外,对于动态全局变量,您可以在主build.gradle文件中定义全局函数

首先,定义您的函数,例如git branch:

def getGitBranch = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}

allProjects部分中设置变量:

allprojects {
    repositories {
        google()
        jcenter()
    }
    project.ext {
        gitBranch="\"${getGitBranch()}\""
    }
}

在您的子项目 android模块build.gradle文件中,获得如下所示的变量:

android {
    compileSdkVersion project.mCompileSdkVersion.toInteger()
    defaultConfig {
        minSdkVersion project.mMinSdkVersion.toInteger()
        ...
        buildConfigField "String", "GitBranch", project.gitBranch
    }
    ...
}

最后,您可以像下面这样在代码中使用它:

public static String getGitBranch() {
    return BuildConfig.GitBranch;
}