Как использовать productFlavors для Android-пакетов - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь создавать различные комплекты приложений для Android через productFlavors. Чтобы сохранить и проверить файлы, мне нужно фиксированное имя файла.

Для APK у меня есть следующий рабочий код:

    applicationVariants.all { variant ->
    if (variant.buildType.name.equals("release")) {
        variant.outputs.all { output ->
            outputFileName = "${applicationId}-${versionCode}-${variant.flavorName}.apk"
        }
    }

    if (variant.getBuildType().isMinifyEnabled()) {
        variant.assemble.doLast {
            copy {
                from variant.mappingFile
                into variant.outputs[0].outputFile.parent
                rename { String fileName ->
                    "${applicationId}-${versionCode}-${variant.flavorName}-mapping.txt"
                }
            }
        }
    }
}

Но это не работает для связок. Я пытаюсь заставить его работать с этим кодом:

tasks.whenTaskAdded { task ->
    if (task.name.startsWith("bundle")) {
        def renameTaskName = "rename${task.name.capitalize()}Aab"
        def flavor = task.name.substring("bundle".length()).uncapitalize()
        tasks.create(renameTaskName, Copy) {
            println android.defaultConfig.versionName
            def applicationId = android.defaultConfig.applicationId
            def versionCode = android.defaultConfig.versionCode

            def path = "${buildDir}/outputs/bundle/${flavor}/"
            from(path)
            include "app.aab"
            destinationDir file("${buildDir}/outputs/renamedBundle/")
            rename "app.aab", "${applicationId}-${versionCode}-${flavor}.aab"
        }

        task.finalizedBy(renameTaskName)
    }
}

Но код версии всегда является кодом версии по умолчанию. Мой build.gradle выглядит так:

project.ext {
VERSION_CODE_INSTANT = 1150
VERSION_CODE_PLAY = 11500
VERSION_NAME = "1.1.5"
}

android {

defaultConfig {
    applicationId "com.abc.test"
    resValue "string", "app_name", "Test"
    versionName VERSION_NAME
    versionCode VERSION_CODE_PLAY
    project.ext.set("archivesBaseName", "app");
}

productFlavors {
    instant {
        dimension 'type'
        versionCode VERSION_CODE_INSTANT
    }
    play {
        dimension 'type'
        versionCode VERSION_CODE_PLAY
    }
}
}

Я также пытаюсь установить project.ext.set ("archivesBaseName", "app"); за аромат, но это всегда генерирует название аромата игры. Манифесты внутри комплектов приложений содержат правильные коды версий. Как я могу получить правильный versionCode из текущей компиляции в задаче копирования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...