Gradle: applicationVariants.all пропускает один вариант

Я использую Gradle для компиляции моего Android-проекта:

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

Не все выходные файлы переименованы, он всегда пропускает 1 файл. Зачем?

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

Я решил использовать этот код:

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

Блок applicationVariants.all {...} теперь находится вне блока release {...} .

Я думаю, что variant.zipAlign.outputFile имеет значение.

При использовании конфигурации build.gradle должно быть 3 выходных файла APK: отладка без знака без знака, выпуск с выравниванием по подписке и разблокировка без подписки. Для applicationVariant существуют две переменные для обработки выходных файлов: outputFile и packageApplication.outputFile , первая используется для zipalign, а более поздняя – в общем случае.

Поэтому правильный способ переименования всех файлов будет таким:

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

Я упростил его, удалив одну из ваших строк, но по существу вам нужно изменить ее так:

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