我试图添加两个"设置"和#34;清理"只有在通过特定任务调用构建时才应在构建的开始和结束时执行的任务。
在以下示例中,setupTask
和cleanupTask
只应在构建的开始和结束时执行,当且仅当构建是由{{1}启动时任务。
标有releaseX
的行使(1)
任务取决于相应的releaseX
任务,以便生成标准的Android版本。
标有assembleX
的行是应该在构建开始时调用(2)
的关键行。这是我要求帮助的行,因为setupTask
总是被调用,而不仅仅是在我希望通过setupTask
启动构建时。
标有releaseX
的行在构建结束时执行清理作业。
你能帮助我吗?
(3)
答案 0 :(得分:2)
你可以指定releaseTask.dependsOn setupTask和那个variant.preBuild.mustRunAfter setupTask。
mustRunAfter指定排序但不指定依赖。
我没有尝试过,它可能会也可能不会起作用。
答案 1 :(得分:0)
另一种方式如下,尽管不如亨利的回答那么优雅。
始终声明preBuild
对setupTask
的依赖关系,但如果任务图不包含setupTask
任务,则会禁用releaseX
。
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
def flavor = variant.productFlavors[0]
def releaseTask = tasks.create(name: "release" + flavor.name.capitalize(), type: Copy) << {
//...
}
releaseTask.dependsOn variant.assemble
variant.preBuild.dependsOn setupTask
releaseTask.finalizedBy cleanupTask
gradle.taskGraph.whenReady {taskGraph ->
if (!(taskGraph.allTasks.any { it.name.startsWith("release") })) {
setupTask.enabled = false
}
}
}
}