【问题标题】:Update value according to build type in Gradle根据 Gradle 中的构建类型更新值
【发布时间】:2015-01-19 10:37:33
【问题描述】:

我正在使用带有 Gradle 构建的 Android Studio。 在我的 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)

当我运行命令 gradle clean assembleRelease 时,我希望看到一个打印输出的文本 My var is release。但是,我看到 My var is debug 。为什么 myVar 的值没有更改为 release

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

【问题讨论】:

  • myVar 在执行时打印(在任务操作中)时,它的行为与在配置时打印的一样吗?
  • “配置时间”是什么意思?
  • 您能否详细说明您要通过此实现的目标,以便我们找到可行的解决方案?

标签: gradle android-gradle-plugin build.gradle gradlew


【解决方案1】:

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

  1. 您声明了一个名为“myVar”的变量,并分配了默认值“debug”
  2. 您运行发布配置块并将“myVar”的值设置为“发布”
  3. 您运行调试配置块并将“myVar”的值设置回“调试”

执行“checkVar”任务时,打印最后一个赋值。

仅供参考:您可以通过调用project.myVar = 'whatever' 来简化 2. 和 3.

【讨论】:

  • 那么,我该如何解决这个问题呢?
  • 您在构建中使用“myVar”变量做什么?请记住,您可以在一次构建运行中同时构建(调试和发布)apk
  • 我的自定义任务需要知道当前的构建类型,并将其作为参数传递给 shell 脚本。该任务执行 shell 脚本。
  • 通常你会为每个构建变体执行一项任务。我更新了我的答案给你看一个例子。
  • 似乎您还没有更新您的答案,您能否举一个关于“每个构建变体执行一项任务”的示例?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多