执行assembleRelease Gradle任务现在可以使用自定义任务

时间:2014-07-07 15:31:41

标签: android android-gradle

我在build.gradle文件中定义了以下Gradle任务

task myTask() << {
    println "Start"
    assembleRelease.execute()
    println "end"
}

我想要的是在执行assembleRelease时执行myTask gradle任务。 但是,我得到的是以下输出

Executing tasks: [myTask]

Configuration on demand is an incubating feature.
Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0
:gymgym:myTask
Start
end

BUILD SUCCESSFUL

如您所见,&#34;开始&#34;后跟&#34;结束&#34;,表示尚未调用assembleRelease

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Gradle中的每个任务都是DAG上的节点。这听起来像是你试图用另一个任务包围一个任务,这不适合模型。但是,您可以使用doFirstdoLast将工作附加到任务的开头和/或结尾。如果您希望它是可选的,您可以使它依赖于可选的命令行参数。

ext.SHOULD_WRAP = hasProperty('shouldWrap') ? shouldWrap.toBoolean() : false
if (SHOULD_WRAP) {
    wrapAssemble()
}
def start() {
    println "Start"
}
def end() {
    println "end"
}
def wrapAssemble() {
    assembleRelease.doFirst {
        start()
    }
    assembleRelease.doLast {
        end()
    }
}

使用此配置,调用./gradlew assembleRelease -PshouldWrap=true将使用前置和附加的工作执行汇编任务。调用./gradlew assembleRelease -PshouldWrap=false或简单./gradlew assembleRelease将正常执行汇编任务。

旧答案

只需将您的任务设置为assembleRelease的依赖项:

任务myTask()&lt;&lt; {     println&#34;开始&#34;     println&#34; end&#34; } assembleRelease.dependsOn&#34; myTask&#34;

现在,当assembleRelease为。时,您的任务将始终执行。