仅当另一个任务调用任务时,才添加Gradle任务依赖关系

时间:2015-09-07 17:07:41

标签: android gradle

我试图添加两个"设置"和#34;清理"只有在通过特定任务调用构建时才应在构建的开始和结束时执行的任务。

在以下示例中,setupTaskcleanupTask只应在构建的开始和结束时执行,当且仅当构建是由{{1}启动时任务。

标有releaseX的行使(1)任务取决于相应的releaseX任务,以便生成标准的Android版本。

标有assembleX的行是应该在构建开始时调用(2)的关键行。这是我要求帮助的行,因为setupTask总是被调用,而不仅仅是在我希望通过setupTask启动构建时。

标有releaseX的行在构建结束时执行清理作业。

你能帮助我吗?

(3)

2 个答案:

答案 0 :(得分:2)

你可以指定releaseTask.dependsOn setupTask和那个variant.preBuild.mustRunAfter setupTask。

mustRunAfter指定排序但不指定依赖。

我没有尝试过,它可能会也可能不会起作用。

答案 1 :(得分:0)

另一种方式如下,尽管不如亨利的回答那么优雅。

始终声明preBuildsetupTask的依赖关系,但如果任务图不包含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
            }
        }
    }
}