Android gradle - другой код версии для разных типов сборки

У нас есть приложение с тремя типами сборки (альфа, бета, выпуск) и несколькими вариантами продукта, которые зависят от страны, в которой развернуто приложение.

Я пытаюсь автоматизировать наши задачи по градиенту и не могу понять, как изменить код версии для разных типов сборки. Идея состоит в том, чтобы иметь код версии в виде «major.minor.patch.».

Моя текущая конфигурация Gradle по умолчанию выглядит так:

final VERSION_MAJOR = 0
final VERSION_MINOR = 7
final VERSION_PATCH = 1

android {
    defaultConfig {
        applicationId "com.app"
        multiDexEnabled true
        versionName "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
        versionCode VERSION_MAJOR * 10000000 + VERSION_MINOR * 100000 + VERSION_PATCH * 1000
    }

Я попытался изменить versionCode в конкретном типе сборки, но это невозможно, поскольку в типах сборки нет этого поля.

Я получаю сообщение об ошибке «Ошибка: невозможно установить значение свойства «versionCode» только для чтения для объекта типа com.android.build.gradle.internal.api.ApplicationVariantImpl». для следующей функции:

applicationVariants.all { variant ->
    if(variant.buildType.name.equals("release"))
        variant.versionCode += 0
    if(variant.buildType.name.equals("beta"))
        variant.versionCode += 1
    if(variant.buildType.name.equals("debug"))
        variant.versionCode += 2
    }
}

Я не знаю, как решить эту проблему. Я, очевидно, не могу использовать разные ароматы, поскольку мы уже используем ароматы для указания страны. PS: я знаю о использовать другой VersionCode для отладки/выпуска android gradle build, но они меняют код версии во вкусе.


person vanomart    schedule 06.11.2016    source источник
comment
Я не знаю, как это сделать. Вы действительно уверены, что ваш versionCode должен различаться в зависимости от типа сборки? Я вижу желание, чтобы они имели разные значения, но это может быть просто монотонно увеличивающееся целое число для каждой сборки, независимо от типа. Если вы не делаете десятки тысяч сборок в день, у вас не закончатся Integer.MAX_VALUE коды версий.   -  person CommonsWare    schedule 09.11.2016