2016-01-06 8 views
5

Volevo rimuovere il makefile del progetto e scrivere alcuni compiti gradle gradevoli. Ho bisogno di eseguire le seguenti operazioni, in questo ordine:Esegui attività di build Android in attività personalizzate

  1. Clean versione
  2. Incremento
  3. Corporatura
  4. Carica

# 1, # 3 e # 4 sono compiti da android e plugin (bintray) mentre # 2 è un'attività personalizzata. Ecco quello che ho finora:

task releaseMajor { 
    doLast { 
     clean.execute() 
     build.execute() 
     incrementVersion.execute() 
     bintrayUpload.execute() 
    } 
} 

L'ordine di esecuzione non è stato così grande come penso clean è stato eseguito dopo build. E binrayUpload era in esecuzione senza sapore (release). Ho anche provato a usare dependsOn senza successo (ordine non funzionante).

Non riesco a trovare in Gradle doc come farlo correttamente. Quando si esegue nel giusto ordine, dalla CLI, tutto funziona perfettamente.

+0

Come hai usato 'dependsOn'? – RaGe

risposta

2

Usa mustRunAfter, o finalizedBy per un controllo più fine ordine:

task releaseMajor (dependsOn: ['clean', 'build', 'incrementVersion', 'bintrayUpload']) 
build.mustRunAfter clean 
incrementVersion.mustRunAfter build 
bintrayUpload.mustRunAfter incrementVersion 
+0

In questo modo non si esegue ad esempio build dopo ogni clean? –

+0

No. Vedere la sezione 17.5 [qui] (https://docs.gradle.org/current/userguide/more_about_tasks.html) per ulteriori informazioni. – RaGe

+0

grazie, funziona alla grande. Quindi, se ho ragione, 'dependsOn' sono attività che verranno eseguite in' releaseMajor' ma l'ordine non viene rispettato fino a quando non viene specificato dopo. E secondo il documento, nell'esecuzione quotidiana, 'build' non verrebbe eseguito dopo' clean'. Ho letto due volte il documento e non è stato molto chiaro per me. –

0

Abbiamo provato questo

task clean { 
    println 'clean task executing' 
} 
task incrementVersion (dependsOn:"clean"){ 
    println 'incrementVersion task executing' 
} 
task building (dependsOn:"incrementVersion"){ 
    println 'build task executing' 
} 
task bintrayUpload (dependsOn:"building") { 
    println 'bintrayUpload task executing' 
} 

L'uscita era

clean task executing 
incrementVersion task executing 
build task executing 
bintrayUpload task executing 

ed eseguito ./gradlew bintryUpload

+0

Sto usando task già fatto da Android chiamato 'clean' o' build'. Posso ridefinirlo. –

+0

Concatenare 'dependsOn' non è una buona soluzione in questo scenario perché, non si può più eseguire ogni singola attività se si desidera, senza innescare prima le attività sulla catena. I compiti degli OP sono in genere compiti indipendenti. – RaGe