2013-08-30 13 views
5

sto usando Gradle per compilare il mio progetto Android:Gradle: applicationVariants.all salta una variante

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
     applicationVariants.all { variant -> 
      def file = variant.outputFile 
      def fileName = file.name 
      fileName = fileName.replace(".apk", "-renamed".apk") 
      variant.outputFile = new File(file.parent, fileName) 
     } 
    } 
} 

Non tutti i file di output vengono rinominati, salta sempre 1 file. Perché?

myapp-debug-unaligned-renamed.apk <-renamed, OK! 
myapp-release.apk     <-NOT renamed, WRONG! 
myapp-release-unaligned-renamed.apk <-renamed, OK! 

risposta

15

ho risolto utilizzando questo codice:

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 

    applicationVariants.all { variant -> 
     def apk = variant.packageApplication.outputFile; 
     def newName = apk.name.replace(".apk", "-renamed.apk"); 
     variant.packageApplication.outputFile = new File(apk.parentFile, newName); 
     if (variant.zipAlign) { 
      variant.zipAlign.outputFile = new File(apk.parentFile, newName.replace("-unaligned", "")); 
     } 
    } 
} 

Il blocco applicationVariants.all {...} è ora al di fuori del blocco release {...}.

Penso che lo faccia la differenza.

+2

La sintassi è cambiata con la versione 1.0.0 del plugin gradle. Vedi la soluzione aggiornata qui: http://stackoverflow.com/questions/23693309/renaming-apk-in-gradle/27369185#27369185 – Nebu

-1

ho semplificato rimuovendo una delle linee ma essenzialmente è necessario modificare in questo modo:

android { 

    buildTypes { 
    ... 
    } 

    applicationVariants.all { variant -> 
     def file = variant.outputFile 
     def fileName = file.name.replace(".apk", "-renamed".apk") 
     variant.outputFile = new File(file.parent, fileName) 
    } 
} 
+0

portare fuori il codice dal blocco buildTypes {} non risolve il problema. Le varianti –

+0

hanno outputFiles (plurale) ora. –

4

Ci dovrebbe essere di 3 file APK di output quando si utilizza la configurazione build.gradle: eseguire il debug senza segno non allineato, rilascio firmato allineato e rilascio firmato non allineato. Esistono due variabili per applicationVariant per gestire i file di output: outputFile e packageApplication.outputFile, il primo è utilizzato per zipalign e il successivo viene utilizzato in generale.

Quindi il modo corretto di rinominare tutti i file saranno come questo:

android.applicationVariants.all { variant -> 
    if (variant.zipAlign) { 
     def oldFile = variant.outputFile; 
     def newFile = oldFile.name.replace(".apk", "-renamed.apk") 
     variant.outputFile = new File(oldFile.parent, newFile) 
    } 

    def oldFile = variant.packageApplication.outputFile; 
    def newFile = oldFile.name.replace(".apk", "-renamed.apk") 
    variant.packageApplication.outputFile = new File(oldFile.parent, newFile) 
} 
Problemi correlati