2013-08-30 328 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

相關問題