Gradle 2.14
我将自定义任务写为“运行”

 task run() {
    def allVariantList = [];
    android.applicationVariants.all { variant ->
        allVariantList.add(variant.getName())
        println "Current allVariantList = " + allVariantList
    }
    println "Result allVariantList = " + allVariantList
}

开始我的任务: gradlew run

结果:

结果allVariantList = []

当前allVariantList = [prod_no_check]

当前allVariantList = [prod_no_check,prod]

当前allVariantList = [prod_no_check,prod,stage]

当前allVariantList = [prod_no_check,prod,stage,dev]

当前allVariantList = [prod_no_check,prod,stage,dev,release]

当前allVariantList = [prod_no_check,prod,stage,dev,release,dev_no_check]

问题:
  • 为什么使用 println“结果allVariantList =” + allVariantList 运行 println“之前的当前allVariantList =” + allVariantList
  • 我需要 println“Result allVariantList =” + allVariantList 执行之后
    println“当前allVariantList =” + allVariantList 。我该怎么做?
  • 最佳答案

    我认为问题在于,在配置任务时(您在配置时(而不是执行时)完成所有工作,android插件尚未配置applicationVariantsapplicationVariants.all在所有已添加的变体上运行,并且在将来添加的所有变体中添加。

    因此,您的输出将建议在配置时尚未设置任何变体,因此结果打印为空,而其他结果则在创建变体之后出现。

    当您在配置时执行所有操作时,即使您不执行任务,也将始终执行该操作。如果调用gradlew help或其他任何内容,您将获得相同的输出。

    因此,要么在执行阶段执行所有代码(将其包装在doLast { }闭包中),要么至少在执行阶段进行结果打印。如果您需要在执行阶段之前完成工作,并且独立于任务是否实际运行,则可以将结果打印至少包装在afterEvaluate { }闭包中,该闭包在评估项目后执行,但仍处于配置阶段。

    09-30 11:59