Gradle 根据渐变中的生成类型更新值

Gradle 根据渐变中的生成类型更新值,gradle,android-gradle-plugin,build.gradle,gradlew,Gradle,Android Gradle Plugin,Build.gradle,Gradlew,我正在使用Android Studio和Gradle构建。 在my build.gradle中,我希望变量的值对于不同的构建类型是不同的: ext { //By default, the value of myVar is 'debug' myVar = 'debug' } android { buildTypes { release { //update value of myVar to 'release'

我正在使用Android Studio和Gradle构建。 在my build.gradle中,我希望变量的值对于不同的构建类型是不同的:

ext {
    //By default, the value of myVar is 'debug'
    myVar = 'debug'
}

android {
   buildTypes {
       release {    
            //update value of myVar to 'release'
            project.ext.set("myVar","release")
        }


        debug {
             //update value of myVar to 'debug'
             project.ext.set("myVar","debug")
        }

    }
}

//I defined a task to check the value of myVar
task checkVar () {
   println "My var is $myVar"
}

check.dependsOn(checkVar)
当我运行命令
gradlecleansassembleerelease
时,我希望看到打印出来的文本
我的var是release
。但是,我看到
我的var是debug
。为什么
myVar
的值未更改为
release


我想要实现的是在执行期间获取当前构建类型。有没有更好的方法来实现这一点?

这不起作用,因为它是一个项目范围内的变量。构建类型块只是配置,所以这里真正发生的事情(虽然有点简化):

  • 您声明了一个名为“myVar”的变量,并指定了默认值“debug”
  • 运行release配置块并将“myVar”的值设置为“release”
  • 运行调试配置块并将“myVar”的值设置回“debug”
  • 执行“checkVar”任务时,将打印最后分配的值


    仅供参考:你可以简化2。三,。只要调用
    project.myVar='whatever'

    在执行时打印
    myVar
    (在任务操作中),它的行为与在配置时打印的行为相同?什么是“配置时”?请参见此处:您能否详细说明您试图用它实现什么,以便我们可以找到一个有效的解决方案?然后,我如何解决这个问题?您在构建中使用'myVar'变量做什么?请记住,您可以在一个构建运行中同时构建(调试和释放)APK。我的自定义任务需要知道当前的构建类型,并将其作为参数传递给shell脚本。该任务执行shell脚本。通常,每个构建变量都会有一个任务执行此任务。我更新了我的答案以向您展示一个示例。您似乎还没有更新您的答案,您能否给出一个关于“每个构建变量一个任务完成”的示例?谢谢