У нас есть release
и debug
buildType, и мы хотим установить для versionCode
и versionName
постоянное значение для debug
, в противном случае каждая сборка перепаковывает apk, даже без изменений кода.
Таким образом, мы устанавливаем фиксированное значение по умолчанию versionCode
, а затем переопределяем его для определенного buildType:
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.gradletest"
minSdkVersion 28
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
applicationVariants.all { variant ->
if (!variant.buildType.isDebuggable()) {
variant.outputs.each { output ->
output.versionCodeOverride = getAppVersionCode()
output.versionNameOverride = getAppVersionName()
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.debug
debuggable true
}
}
}
, пока это работает для apk, к сожалению, сгенерированный class BuildConfig
всегда имеет значение по умолчанию 1/"1.0"
значение.Мы читаем и показываем versionNumber
из приложения, как подсказывает популярный ответ .
Очевидно, BuildConfig.java
генерируется при конфигурации, а не при сборке проекта, поэтому он не может знатьвыбранный вариант.Как с этим справиться?
Наш getAppVersionCode()
содержит метку времени, поэтому каждый versionCode отличается.Я попытался перевернуть операторы, чтобы в отладочных сборках каждый раз отображались разные versionCode и versionName, что было бы хорошо для нас.
android {
defaultConfig {
versionCode getAppVersionName()
versionName getAppVersionCode()
}
applicationVariants.all { variant ->
if (variant.buildType.isDebuggable()) {
variant.outputs.each { output ->
output.versionCodeOverride = 1
output.versionNameOverride = "1.0"
}
}
}
}
Причина, по которой у нас исправлена отладка versionCode
в первомДело в том, что мы не хотим перестраивать все подмодули для каждого изменения кода.Во втором варианте, даже если мы установили фиксированное versionNumber
для отладочной сборки через output.versionCodeOverride = 1
, все подмодули перестраиваются в Android Studio.До Android Studio 3.0 это работало, но больше не работает.Пожалуйста, сообщите.