Переименуйте выходной файл в новый Android-модуль 3.0.0-alpha1

Я использовал это в предыдущем плагине градиента, и он работал нормально.

applicationVariants.all { v -> v.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "companyName-app-v${variant.versionName}.apk")) }} 

С недавним обновлением до 3.0.0-alpha1 он показывает ошибку.

Я прочитал ссылку https://developer.android.com/studio/preview/features/new-android-plugin-migration.html, но не смог найти точный источник ошибок.

Есть ли исправление к этому, я не хватает?

Solutions Collecting From Web of "Переименуйте выходной файл в новый Android-модуль 3.0.0-alpha1"

Похоже, проблема уже решена, и ответ заключается в том, что она не поддерживается в настоящее время, но для нее будет представлен новый API.

Чтобы изменить имя APK, вы можете изменить его на:

 android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "companyName-app-v${variant.versionName}.apk" } } 

Если вы используете each () для итерации по вариантным объектам, вам нужно начать использовать all (). Это потому, что каждый () выполняет итерацию только с объектами, которые уже существуют во время настройки, но этот объект не существует во время конфигурации с новой моделью. Тем не менее, all () адаптируется к новой модели путем сбора объекта по мере его добавления во время выполнения.

Я на Канарейке 3, и это работает на меня. Но см. Kludge для имени ABI? Я не мог понять, где получить ABI в новой структуре, поэтому извлек его из имени по умолчанию (отстой). Если кто-то знает лучший способ получить имя ABI при использовании разделов (чтобы изменить версию кода на ABI), я бы хотел услышать. Возможно, настало время опубликовать отдельный вопрос. В любом случае, это работает на prod APK builds.

 def ext = rootProject.extensions.getByName("ext") ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'x86': 8] android.applicationVariants.all { variant -> if (variant.buildType.name != "debug") { variant.outputs.all { vOutput -> // there has got to be a better way to get the ABI name than this kludge def nameTokens = vOutput.name.split("-"); def abiName = nameTokens[1] abiName = nameTokens[2].contains("v7a") ? abiName + "-v7a" : abiName def versionNumber = ext.versionCodes.get(abiName) * 1000 + variant.versionCode def newApkName = "${getAppName()}-${variant.flavorName}-${variant.versionName}-${versionNumber}.apk" outputFileName = newApkName } } } 

Результирующие имена файлов, созданные из «Build APKs» для версии Code 1, versionName «1.0.0» с помощью armeabi-v7a и x86 ABI соответственно:

 AppName-Prod-1.0.0-2001.apk AppName-Prod-1.0.0-8001.apk 

Я не смог найти какой-либо документ еще в именах ABI в новой настройке. Старый способ получить их, очевидно, сломан 🙂