我有一个使用Gradle构建的Android应用程序,其中包含BuildTypes和Product Flavors(变体)。 我可以运行此命令来构建特定的apk:
./gradlew testFlavor1Debug
./gradlew testFlavor2Debug
我必须在每个变体的build.gradle中创建一个自定义任务,例如:
./gradlew myCustomTaskFlavor1Debug
我为此创建了一个任务:
android.applicationVariants.all { variant ->
task ("myCustomTask${variant.name.capitalize()}") {
println "*** TEST ***"
println variant.name.capitalize()
}
}
我的问题是,所有变种都会调用此任务,而不是我正在运行的唯一变体。 输出:
./gradlew myCustomTaskFlavor1Debug
*** TEST ***
Flavor1Debug
*** TEST ***
Flavor1Release
*** TEST ***
Flavor2Debug
*** TEST ***
Flavor2Release
预期产出:
./gradlew myCustomTaskFlavor1Debug
*** TEST ***
Flavor1Debug
如何定义自定义任务,动态,每个变体,然后使用正确的变体调用它?
答案 0 :(得分:17)
这是因为逻辑是在配置时执行的。尝试添加操作(<<
):
android.applicationVariants.all { variant ->
task ("myCustomTask${variant.name.capitalize()}") << {
println "*** TEST ***"
println variant.name.capitalize()
}
}
答案 1 :(得分:1)
从Gradle 3.2开始,遵循蛋白石的答案和<<
的{{3}},正确的答案应该是:
android.applicationVariants.all { variant ->
task ("myCustomTask${variant.name.capitalize()}") {
// This code runs at configuration time
// You can for instance set the description of the defined task
description = "Custom task for variant ${variant.name}"
// This will set the `doLast` action for the task..
doLast {
// ..and so this code will run at task execution time
println "*** TEST ***"
println variant.name.capitalize()
}
}
}