А вот и модернизация моего предыдущего ответа, который можно увидеть ниже. Этот работает с Gradle 4.4 и Android Studio 3.1.1 .
Что делает этот скрипт:
- Создает файл version.properties, если он не существует (ответ Пола Кантрелла «за» ниже, откуда я получил идею, если вам нравится этот ответ)
- Для каждой сборки, отладочной версии или при каждом нажатии кнопки запуска в Android Studio число VERSION_BUILD увеличивается.
- Каждый раз, когда вы собираете релиз, ваш код версии Android для магазина воспроизведения увеличивается, а номер патча увеличивается.
- Бонус: после завершения сборки скопируйте ваш apk,
projectDir/apk
чтобы сделать его более доступным.
Этот скрипт создаст номер версии, которая выглядит как v1.3.4 (123)
и создаст файл apk, например AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Основная версия: необходимо изменить вручную для больших изменений.
Дополнительная версия: необходимо изменить вручную для чуть менее значительных изменений.
Версия патча: Увеличивается при запускеgradle assembleRelease
Версия сборки: увеличивает каждую сборку
Номер версии: такой же, как версия патча , это код версии, который Play Store должен увеличивать для каждой новой загрузки apk.
Просто измените содержание в комментариях, отмеченных 1–3 ниже, а все остальное сделает сценарий. :)
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
def versionPropsFile = file('version.properties')
def value = 0
Properties versionProps = new Properties()
if (!versionPropsFile.exists()) {
versionProps['VERSION_PATCH'] = "0"
versionProps['VERSION_NUMBER'] = "0"
versionProps['VERSION_BUILD'] = "-1" // I set it to minus one so the first build is 0 which isn't super important.
versionProps.store(versionPropsFile.newWriter(), null)
}
def runTasks = gradle.startParameter.taskNames
if ('assembleRelease' in runTasks) {
value = 1
}
def mVersionName = ""
def mFileName = ""
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_PATCH'] = (versionProps['VERSION_PATCH'].toInteger() + value).toString()
versionProps['VERSION_NUMBER'] = (versionProps['VERSION_NUMBER'].toInteger() + value).toString()
versionProps['VERSION_BUILD'] = (versionProps['VERSION_BUILD'].toInteger() + 1).toString()
versionProps.store(versionPropsFile.newWriter(), null)
// 1: change major and minor version here
mVersionName = "v1.0.${versionProps['VERSION_PATCH']}"
// 2: change AppName for your app name
mFileName = "AppName-${mVersionName}.apk"
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
applicationId "com.example.appname" // 3: change to your package name
versionCode versionProps['VERSION_NUMBER'].toInteger()
versionName "${mVersionName} Build: ${versionProps['VERSION_BUILD']}"
}
} else {
throw new FileNotFoundException("Could not read version.properties!")
}
if ('assembleRelease' in runTasks) {
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
outputFileName = mFileName
}
}
}
}
task copyApkFiles(type: Copy){
from 'build/outputs/apk/release'
into '../apk'
include mFileName
}
afterEvaluate {
assembleRelease.doLast {
tasks.copyApkFiles.execute()
}
}
signingConfigs {
...
}
buildTypes {
...
}
}
================================================== ==
ПЕРВОНАЧАЛЬНЫЙ ОТВЕТ:
Я хочу, чтобы имя версии также увеличивалось автоматически. Так что это просто дополнение к ответу CommonsWare, который отлично сработал для меня. Это то, что работает для меня
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
РЕДАКТИРОВАТЬ:
Поскольку я немного ленив, я хочу, чтобы управление версиями работало максимально автоматически. То , что я хочу иметь билд , который увеличивается с каждой сборкой, в то время как номер версии и версия Имя только увеличиваются , когда я делаю сборку выпуска.
Это то, что я использовал в течение прошлого года, основы взяты из ответа CommonsWare и моего предыдущего ответа, а также некоторых других. Это приводит к следующему управлению версиями:
Название версии: 1.0.5 (123) -> Major.Minor.Patch (Build), Major и Minor меняются вручную.
В build.gradle:
...
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def value = 0
def runTasks = gradle.startParameter.taskNames
if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) {
value = 1;
}
def versionMajor = 1
def versionMinor = 0
def versionPatch = versionProps['VERSION_PATCH'].toInteger() + value
def versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1
def versionNumber = versionProps['VERSION_NUMBER'].toInteger() + value
versionProps['VERSION_PATCH'] = versionPatch.toString()
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps['VERSION_NUMBER'] = versionNumber.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode versionNumber
versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild}) Release"
minSdkVersion 14
targetSdkVersion 23
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def fileNaming = "apk/RELEASES"
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
output.outputFile = new File(getProject().getRootDir(), "${fileNaming}-${versionMajor}.${versionMinor}.${versionPatch}-${outputFile.name}")
}
}
}
}
} else {
throw new GradleException("Could not read version.properties!")
}
...
}
...
Patch и VersionCode увеличиваются , если вы собираете свой проект через терминал «сборка» , «assembleRelease» или «Аr» , который создает новую папку в корневом каталоге проекта под названием APK / RELEASE , поэтому вам не нужно просматривать сборки / выходы / more / more / more, чтобы найти свой apk.
Свойства вашей версии должны выглядеть так:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Очевидно, начать с 0. :)