2013-08-30 11 views
5

Używam Gradle do kompilowania mojego Android projektu:Gradle: applicationVariants.all pomija jeden wariant

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) 
     } 
    } 
} 

Nie wszystkie pliki wyjściowe są zmieniane, to zawsze pomija 1 plik. Czemu?

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

Odpowiedz

15

I rozwiązać przy użyciu tego kodu:

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", "")); 
     } 
    } 
} 

Blok applicationVariants.all {...} jest teraz poza blokiem release {...}.

Wydaje mi się, że różnica między wartością variant.zipAlign.outputFile.

+2

Składnia została zmieniona w wersji 1.0.0 wtyczki gradle. Zobacz zaktualizowane rozwiązanie tutaj: http://stackoverflow.com/questions/23693309/renaming-apk-in-gradle/27369185#27369185 – Nebu

-1

I uproszczone go przez usunięcie jednego ze swoich wierszy, ale przede wszystkim trzeba zmienić go tak:

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

wydawanie kodu z bloku buildTypes {} nie rozwiązuje problemu. –

+0

warianty mają teraz outputFiles (liczba mnoga). –

4

Nie powinno być 3 pliki APK wyjściowe podczas korzystania z konfiguracji build.gradle: debug unsigned niepodpisany, podpis zatwierdzony pod względem wydania i podpisany bez podpisu. Istnieją dwie zmienne dla applicationVariant do obsługi plików wyjściowych: outputFile i packageApplication.outputFile, pierwsza jest używana do zipalign, a druga jest używana w ogólnym przypadku.

więc właściwy sposób, aby zmienić nazwę wszystkich plików będzie tak:

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) 
} 
Powiązane problemy