Ось іде модернізація моєї попередньої відповіді, яку можна побачити нижче. Цей працює з Gradle 4.4 та Android Studio 3.1.1 .
Що робить цей сценарій:
- Створює файл version.properties, якщо такого немає (до голосування відповіді Пола Кантрелла нижче, саме звідки я отримав ідею, якщо вам подобається ця відповідь)
- З кожним складанням, випуском налагодження або будь-яким натисканням кнопки запуску в Android Studio число VERSION_BUILD збільшується.
- Кожен раз , коли ви збираєте Реліз свого Android VersionCode для магазину збільшуються гри і вашого накладне число збільшується.
- Бонус: Після завершення збірки скопіюйте свій 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
Основна версія: Для більших змін потрібно змінити її вручну.
Незначна версія: для невеликих менш великих змін потрібно змінити вручну.
Версія Patch: збільшується під час запускуgradle assembleRelease
Версія збірки: збільшує кожну збірку
Номер версії: Так само, як і версія Patch , це код версії, який у 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 {
...
}
}
===================================================== ==
ПОЧАТОК ВІДПОВІДЬ:
Я хочу, щоб і версіяName автоматично збільшувалася. Тож це лише доповнення до відповіді CommonsWare, яка прекрасно працювала для мене. Це те, що працює для мене
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
Редагувати:
Оскільки я трохи лінивий, я хочу, щоб моя версія працювала максимально автоматично. Мені хочеться, щоб версія версії збільшилася з кожною збіркою, тоді як номер версії та назва версії збільшуються лише тоді, коли я створюю версію версії.
Це те, що я використовую останній рік, основи - це відповідь CommonsWare та моя попередня відповідь, а також ще кілька. Це призводить до наступної версії:
Назва версії: 1.0.5 (123) -> Major.Minor.Patch (Build), Major and 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 збільшується, якщо ви збираєте проект через термінал за допомогою "збирати" , "збиратиRelease" або "aR", що створює нову папку в корені проекту під назвою apk / RELEASE, так що вам не доведеться переглядати збірки / виходи / more / more / more, щоб знайти свій apk.
Властивості версії повинні мати такий вигляд:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Очевидно, почніть з 0. :)