Gradle 将变量设置为Gadle构建文件

Gradle 将变量设置为Gadle构建文件,gradle,Gradle,这是一个问题的后续问题 我想“知道”在Gradlebuild.Gradle文件执行期间,Android应用程序是从哪个分支生成的,并将分支名称添加到我的应用程序的versionName 这是我天真的做法: apply plugin: 'android' def branch ="test"; android { compileSdkVersion 22 buildToolsVersion '22.0.0' // .. buildTypes {

这是一个问题的后续问题

我想“知道”在Gradle
build.Gradle
文件执行期间,Android应用程序是从哪个分支生成的,并将分支名称添加到我的应用程序的
versionName

这是我天真的做法:

apply plugin: 'android'

def branch ="test";

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.0'

    // ..

    buildTypes {

        debug {
            minifyEnabled false;
            applicationIdSuffix ".debug"
            versionNameSuffix " branch: " + "$branch"
            debuggable true
            signingConfig signingConfigs.debug
        }

    }

}

task setArgs << {

   branch =  "$word1"

}

task showArgs << {
    println "$branch"
}
执行showArgs时,设置branch变量并在控制台中记录“mybranch”

但当我执行

gradlew setArgs -Pword1=mybranch build
分支变量仍然是默认字符串“test”,因此在
versionNameSuffix
中无用


让它工作的最好方法是什么?

那是因为

versionNameSuffix " branch: " + "$branch"
在配置阶段(配置所有任务时)执行

然后,当此阶段完成且gradle知道所有任务及其依赖关系时,将执行setArgs,并执行以下行:

branch =  "$word1"
您可以简单地删除setArgs任务并执行以下操作

versionNameSuffix " branch: $word1"
或者,如果在未传递属性word1时希望分支的默认值为“test”:

versionNameSuffix(' branch: ' + (project.hasProperty('word1') ? project.property('word1') : 'test'))

我认为更好的方法是使用一个文件来存储分支名称——这样你就不必在调用Gradle时提供它

build.gradle:

apply plugin: 'android'

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.0'

    // ..
    buildTypes {
        debug {
            minifyEnabled false;
            applicationIdSuffix ".debug"
            versionNameSuffix " branch: " + "$branch"
            debuggable true
            signingConfig signingConfigs.debug
        }
    }
}
gradle.properties

branch=mybranch

但这意味着我必须“静态地”将分支名称放入属性文件中,对吗?当然,是的-但是因为它是一个分支,所以每个分支可以有不同的
gradle.properties
。但是,您也可以为它提供将分支字符串直接传递给build命令works的
-Pbranch=mybranch
,谢谢!
branch=mybranch