Используйте другой версии VersionCode для отладки/выпуска android gradle build
Я хочу применить другой VersionCode для создания файла apk.
Для отладки только исправить его до 1
и для выпуска любого номера, указанного в defaultConfig.
Ниже код дает mypackage-release-1.apk
файл как assembleRelease артефакт, чего не ожидается. Я ожидал mypackage-release-10111.apk
для этого.
почему строка debug { defaultConfig.versionCode=1 }
влияет на артефакт сборки?
defaultConfig {
versionCode 10111
versionName '2.5.4'
minSdkVersion 10
targetSdkVersion 21
}
signingConfigs {
debug {
project.ext.loadSign = false
defaultConfig.versionCode = 1 // Why this value applied to assembleRelease?
}
release {
project.ext.loadSign = true
applicationVariants.all { variant ->
variant.outputs.each { output ->
def file = output.outputFile
output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionCode + ".apk"))
}
}
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
}
Ответы
Ответ 1
Мне тоже, но я думаю, что defaultConfig.versionCode
был задан при компиляции build.gradle
. Это глобальная статическая переменная и назначается в compiletime, а не во время выполнения.
Я думаю, что мы можем перехватить выполнение задачи gradle и изменить defaultConfig.versionCode
во время выполнения.
После goooooooogle я нашел, что это работает для меня: https://gist.github.com/keyboardsurfer/a6a5bcf2b62f9aa41ae2
Ответ 2
Поздно на вечеринке...
Весь файл gradle оценивается перед выполнением любой задачи, поэтому вы в основном меняете значение по умолчанию versionCode
при объявлении конфигураций debug
. Нет прямого пути к reset versionCode
из buildType
, но ссылка на другой ответ делает трюк, объявляя задачу о вариантах сборки.
android {
...
defaultConfig {
...
}
buildTypes {
...
}
applicationVariants.all { variant ->
def flavor = variant.mergedFlavor
def versionCode = flavor.versionCode
if (variant.buildType.isDebuggable()) {
versionCode += 1
}
flavor.versionCode = versionCode
}
}
Ответ 3
Вот обновленная версия:
android {
defaultConfig { ... }
applicationVariants.all { variant ->
if (variant.name == 'debug') {
variant.outputs.each { output ->
output.versionCodeOverride = 1
}
}
}
}
Ответ 4
Использовать с ароматами:
applicationVariants.all { variant ->
def flavor = variant.mergedFlavor
def name = flavor.getVersionName()
def code = flavor.getVersionCode()
if (variant.buildType.isDebuggable()) {
name += '-d'
code = 1
}
variant.outputs.each { output ->
output.versionNameOverride = name
output.versionCodeOverride = code
}
}