2015-04-27 18 views
6

Sto provando a configurare il mio file build.gradle per eseguire solo un'attività gradle quando è selezionata la variante di generazione del rilascio. Finora, il mio compito viene sempre eseguito, sia nel mio debug o nel rilascio dei tipi di build che nella firma delle configurazioni. Ho provato ad aggiungere il mio compito all'interno di un blocco ApplicationVariants e verificare se è la variante di rilascio, ma scorre solo attraverso tutte le varianti.Android - Esegui solo il compito Gradle nella variante di rilascio versione

applicationVariants.all { variant -> 
      variant.outputs.each { output -> 
     ... 
    } 
} 

So che i compiti sia il debug e di rilascio correre sempre per qualsiasi variante di compilazione si sceglie. È possibile eseguire qualche codice solo quando si crea una build per il rilascio? Se sì, dove va quel codice? Grazie!

Ho letto tutte le domande StackOverflow su questo argomento, ma nessuna delle risposte mi è davvero piaciuta. Il mio obiettivo finale è quando seleziono la variante di build "release" per una build del Play Store, un messaggio viene pubblicato sul nostro server. Non voglio che ciò accada quando eseguo il debug.

+0

"Il mio obiettivo finale è quando seleziono il "rilascio" costruire la variante per un Play Store build, un messaggio viene pubblicato sul nostro server. "Quindi vuoi eseguire un'attività quando viene selezionata una variante di build dalla finestra Variant Build di IDE? –

+0

Sì. Se seleziono "release" dalla finestra Build Variant, voglio solo determinati task da eseguire durante il processo di compilazione. Se "debug" è selezionato, tali attività non dovrebbero essere eseguite. – Mark

+0

La tua domanda è piuttosto fuorviante. Non si desidera eseguire un determinato compito selezionando la variante di compilazione, ma quando si esegue un'attività Gradle specifica (o assembleRelese o assemblaDebug). In tal caso, 'assembleRelease.dependsOn customTask' dovrebbe fare il lavoro. –

risposta

13

prova # 3

android.applicationVariants.all { v -> 
    if (v.buildType.name == "release"){ 
     v.assemble.doLast { 
      logger.lifecycle("we have successfully built $v.name and can post a messaage to remote server") 
     } 
    } 
} 
+0

Ricevo un errore "Nessuna firma del metodo" in quella prima riga. – Mark

+0

@Mark Ho aggiornato la mia risposta, per favore provatelo –

+1

La prova # 2 mi riporta al mio problema originale, se cambio "debug" per "release", ma imposta il mio Build Variant su "debug", il codice all'interno dell'istruzione if verrà comunque chiamato su ogni build. – Mark

0

ho dovuto fare qualcosa di simile per controllare versione build:

buildTypes { 
    applicationVariants.all { variant -> 
     variant.outputs.each {output -> 
      def project = "AppName" 
      def separator = "_" 
      /*def flavor = variant.productFlavors[0].name*/ 
      def buildType = variant.variantData.variantConfiguration.buildType.name 
      def versionName = variant.versionName 
      def versionCode = variant.versionCode 
      def date = new Date(); 
      def formattedDate = date.format('yyyyMMdd_HHmm') 
      if (variant.buildType.name == "release"){ 
       def newApkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + formattedDate + ".apk" 
       output.outputFile = new File(output.outputFile.parent, newApkName) 
      } 
      if (variant.buildType.name == "debug"){ 
       def newApkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + ".apk" 
       output.outputFile = new File(output.outputFile.parent, newApkName) 
      } 
     } 
    } } 
Problemi correlati