2013-08-30 12 views

Odpowiedz

46

Można to zrobić w ten sposób:

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

Dzięki temu zadaniu preBuild automatycznie zostanie wezwany przed build zadania.

Jeśli chcesz uruchomić preBuild w fazie konfiguracji (poprzednim przykładzie uruchomić preBuild w execution fazy) można to zrobić w ten sposób:

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

Więcej o Gradle cyklu kompilacji można tutaj http://www.gradle.org/docs/current/userguide/build_lifecycle.html czytać.

+0

jak wykonać plik wsadowy po wygenerowaniu pliku APK w tej lokalizacji "\ app \ build \ outputs \ apk"? Moje wymaganie jest jak raz xyz.apk wygenerowany w "\ app \ build \ outputs \ apk" location Chcę przenieść ten plik automatycznie do lokalizacji "D:/Xyz". –

+0

Objaśnienie drugiego przykładu jest błędne. 'doFirst' doda zamknięcie jako pierwszą czynność zadania dla zadania kompilacji. Akcje zadaniowe są wykonywane w fazie realizacji. – helpermethod

+0

Metoda Task.leftShift (zamknięcie) została uznana za przestarzałą i ma zostać usunięta w Gradle 5.0. Zamiast tego użyj Task.doLast (Action). –

23

Dla tych, którzy zastanawiają się, jak to zrobić w projekcie Android, to pracował dla mnie:

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

Czy można to nazwać przed 'assembleDebug'? –

+1

@IgorGanapolsky sprawdź proszę moja odpowiedź powyżej, jak to –

6

Jest jeszcze jeden sposób, jak to zrobić

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

Próbuję zrobić to dla zadania 'preBuild', ale wydaje się nie brać. – atreat

+0

Nie wydaje się, że preBuild faktycznie przychodzi przez 'whenTaskAddedded'. Nie widzę tego, kiedy wydrukuję 'task.name' w tym zamknięciu. – atreat

+0

'if (task.name == 'preDebugBuild' || task.name == 'preReleaseBuild')' działa dla mnie zamiast 'preBuild'. – atreat

Powiązane problemy