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“结果allVariantList =”+ allVariantList 执行AFTER println“Current allVariantList =”+ allVariantList 。我怎么能这样做?
答案 0 :(得分:0)
我认为问题是,在你的任务配置时(你在配置时完成所有工作,而不是执行时间,android插件尚未配置applicationVariants
。{{1} }运行已添加的所有变体以及将来添加后添加的所有变体。
因此,您的输出会显示在配置时尚未设置变体,因此您的结果打印为空,其他的则在创建变体后出现。
正如您在配置时所做的那样,即使您没有执行任务,它也将始终完成。如果您拨打applicationVariants.all
或其他任何内容,您将获得相同的输出。
所以要么在执行阶段执行所有代码(将其包装在gradlew help
闭包中),要么至少在执行阶段执行结果打印。如果您需要在执行阶段之前完成您的工作,并且无论您的任务是否实际运行,您可能至少将结果打印包裹在评估项目后执行的doLast { }
闭包中,但仍然在配置阶段。
答案 1 :(得分:0)
task run() {
description "Install and run app on device/emulator"
def allVariantList = [];
android.applicationVariants.all { variant ->
allVariantList.add(variant.getName())
println "Current allVariantList = " + allVariantList
}
doLast {
println "Result allVariantList = " + allVariantList
}
}
这是解释。 https://docs.gradle.org/current/userguide/build_lifecycle.html
例22.1。单个项目构建