После обновления до AGP (Android Gradle Plugin) 3.2.0 мы не можем установить versionCode
непосредственно на mergedFlavor
.Если мы сделаем это, мы получим это полезное предупреждение:
versionCode cannot be set on a mergedFlavor directly.
versionCodeOverride can instead be set for variant outputs using the following syntax:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.versionCodeOverride = 40805
}
}
}
После этого изменения все прекрасно работает, кроме одной мелочи.Автоматически сгенерированный BuildConfig.VERSION_CODE
не отражает код версии от output.versionCodeOverride = 40805
.
До AGP 3.2.0 мы могли динамически устанавливать versionCode с помощью:
applicationVariants.all { v ->
v.mergedFlavor.versionCode = 40805 // 40805 is hardcoded as an example but it is archived dynamically.
}
И версиикод отражен в BuildConfig.VERSION_CODE
(это очень удобно), и я хотел бы заархивировать то же самое с AGP 3.2.0.
Я знаю, что я мог бы обойти это путем создания настраиваемого поля конфигурации сборки для этого, например variant.buildConfigField('int', 'OVERRIDDEN_VERSION_CODE', "${versionCodeOverride}")
и это сгенерирует BuildConfig.OVERRIDDEN_VERSION_CODE
с кодом версии, который я переопределил.Архивирование происходит так же, как и при использовании AGP версии ниже 3.2.0, путем установки от versionCode
до mergedFlavor.versionCode = 40805
, но мне не нравятся такие обходные пути.
Есть ли способ получить output.versionCodeOverride = 40805
отражается в автоматически сгенерированном BuildConfig.VERSION_CODE
?
PS: если мы установим versionCode
непосредственно в конкретном аромате, он будет работать, как и ожидалось, но это не то, что я хочу знать:)
ОБНОВЛЕНИЕ
Нашел похожий вопрос (с хорошо описанным вариантом использования) и, учитывая проведенные обсуждения, я мог бы дать лучший ответ здесь .