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

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

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, но не смог найти точный источник ошибок.

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

Ответы

Ответ 1

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

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

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

Источник

Ответ 2

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

Ответ 3

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

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" соответственно с ABB соответственно с armeabi-v7a и x86:

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

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