Android gradle构建:如何设置全局变量

Android gradle构建:如何设置全局变量,gradle,android-gradle-plugin,Gradle,Android Gradle Plugin,如何设置可从build.gradle和tasks访问的全局变量?设置全局变量 project.ext.set("variableName", value) 要从项目中的任何位置访问它,请执行以下操作: project.variableName 例如: project.ext.set("newVersionName", versionString) 然后 println project.newVersionName 有关更多信息,请参阅: 编辑: 正如Dmitry所评论的,在新版本中,您可

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

设置全局变量

project.ext.set("variableName", value)
要从项目中的任何位置访问它,请执行以下操作:

project.variableName
例如:

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

println project.newVersionName
有关更多信息,请参阅:

编辑: 正如Dmitry所评论的,在新版本中,您可以使用以下速记:

project.ext.variableName = value

盖伊的回答很好。我只想添加实用代码

例如:

项目build.gradle中放入类似的内容:

并将类似的内容放入模块build.gradle以访问它:

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

你也可以这样做。假设您要添加appcompat和版本
25.3.1
,您可以在项目级build.gradle中添加变量
version\u name

现在,您可以将其添加到应用程序级构建渐变中,并避免任何冲突

compile "com.android.support:appcompat-v7:$version_name"
compile "com.android.support:recyclerview-v7:$version_name"
compile "com.android.support:design:$version_name"

另外,对于动态全局变量,您可以在主
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()}\""
    }
}
build.gradle
子项目的android模块的文件中,获取如下变量:

android {
    compileSdkVersion project.mCompileSdkVersion.toInteger()
    defaultConfig {
        minSdkVersion project.mMinSdkVersion.toInteger()
        ...
        buildConfigField "String", "GitBranch", project.gitBranch
    }
    ...
}
public static String getGitBranch() {
    return BuildConfig.GitBranch;
}
最后,您可以在代码中使用它,如下所示:

android {
    compileSdkVersion project.mCompileSdkVersion.toInteger()
    defaultConfig {
        minSdkVersion project.mMinSdkVersion.toInteger()
        ...
        buildConfigField "String", "GitBranch", project.gitBranch
    }
    ...
}
public static String getGitBranch() {
    return BuildConfig.GitBranch;
}

您还可以使用相同的方法从gradle.properties访问变量。定义变量的更短方法是
project.ext.variableName=value
(无需显式调用
project.ext.set
),您可以在任务中为其设置值吗?为什么设置时需要.ext,而在读取时则不需要?想象一下,这是任何其他编程语言的语法——这会让我发疯……为什么你问了一个问题,几分钟后马上回答了?关于文件问题^^如何从Java获取ext.version\u name值?我想把它添加到日志中。@RytisGuntulis