如何设置可以从build.gradle和tasks访问的全局变量?
答案 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;
}