2013-08-30 280 views

回答

46

你能做到这样:

task build << { 
    println 'build' 
} 
task preBuild << { 
    println 'do it before build' 
} 
build.dependsOn preBuild 

由于该任务preBuild将前build任务被自动调用。

如果你想运行在配置阶段preBuild(前面的例子中execution阶段运行preBuild),你可以这样做:

task build << { 
    println 'build' 
} 
build.doFirst { 
    println 'do it before build' 
} 

更多关于gradle这个构建生命周期可以在这里阅读http://www.gradle.org/docs/current/userguide/build_lifecycle.html

+0

如何执行在此位置生成APK后的批处理文件“\ app \ build \ outputs \ apk”?我的要求就像在“\ app \ build \ outputs \ apk”位置生成一次xyz.apk我想将该文件自动移动到“D:/ Xyz”位置。 –

+0

第二个例子的解释是错误的。 'doFirst'将添加闭包作为构建任务的第一个任务动作。任务操作在执行阶段执行。 – helpermethod

+0

Task.leftShift(Closure)方法已被弃用,并计划在Gradle 5.0中删除。请改用Task.doLast(Action)。 –

23

对于那些谁不知道如何在Android项目做到这一点,这个工作对我来说:

task myTask << { 
    println "here's a task" 
} 
preBuild.dependsOn myTask 
+4

可以在'assembleDebug'之前调用它吗? –

+1

@IgorGanapolsky请检查我的答案上面如何对此 –

6

还有一个办法如何做到这一点

task myTask << { 
    println "here's a task" 
} 
tasks.whenTaskAdded { task -> 
if (task.name == 'assembleDebug') { 
    task.dependsOn myTask 
} 
+0

我试图为'preBuild'任务做这件事,但它似乎并没有采取。 – atreat

+0

似乎preBuild实际上是通过'whenTaskAdded'来的。当我在这个闭包中打印'task.name'时,我没有看到它。 – atreat

+0

'if(task.name =='preDebugBuild'|| task.name =='preReleaseBuild')'适用于我而不是'preBuild'。 – atreat

相关问题