Voici une modernisation de ma réponse précédente qui peut être vue ci-dessous. Celui-ci fonctionne avec Gradle 4.4 et Android Studio 3.1.1 .
Ce que fait ce script:
- Crée un fichier version.properties s'il n'en existe pas (vote plus haut la réponse de Paul Cantrell ci-dessous, d'où j'ai eu l'idée si vous aimez cette réponse)
- Pour chaque build, version de débogage ou chaque fois que vous appuyez sur le bouton d'exécution dans Android Studio, le nombre VERSION_BUILD augmente.
- Chaque fois que vous assemblez une version, votre version AndroidCode pour le Play Store augmente et votre numéro de patch augmente.
- Bonus: une fois la construction terminée, copiez votre apk pour
projectDir/apk
le rendre plus accessible.
Ce script créera un numéro de version qui ressemble à v1.3.4 (123)
et construira un fichier apk comme AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Version majeure: doit être modifiée manuellement pour des changements plus importants.
Version mineure: doit être modifiée manuellement pour des modifications légèrement moins importantes.
Version du correctif: augmente lors de l'exécutiongradle assembleRelease
Version de build: augmente chaque build
Numéro de version: identique à la version du correctif , il s'agit du code de version dont le Play Store doit avoir augmenté pour chaque nouveau téléchargement d'apk.
Changez simplement le contenu dans les commentaires étiquetés 1 à 3 ci-dessous et le script devrait faire le reste. :)
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 {
...
}
}
=================================================== ==
RÉPONSE INITIALE:
Je veux que le nom de version augmente également automatiquement. Ce n'est donc qu'un ajout à la réponse de CommonsWare qui a parfaitement fonctionné pour moi. C'est ce qui fonctionne pour moi
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
ÉDITER:
Comme je suis un peu paresseux, je veux que ma gestion des versions fonctionne aussi automatiquement que possible. Ce que je veux, c'est avoir une version de build qui augmente avec chaque build, tandis que le numéro de version et le nom de la version augmentent uniquement lorsque je crée une version de version.
C'est ce que j'utilise depuis un an, les bases sont tirées de la réponse de CommonsWare et de ma réponse précédente, ainsi que d'autres. Cela entraîne le contrôle de version suivant:
Nom de la version: 1.0.5 (123) -> Major.Minor.Patch (Build), Major et Minor sont modifiés manuellement.
Dans 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 et versionCode est augmenté si vous assemblez votre projet via le terminal avec 'assemble' , 'assembleRelease' ou 'aR' qui crée un nouveau dossier dans la racine de votre projet appelé apk / RELEASE afin que vous n'ayez pas à regarder à travers build / output / plus / plus / plus pour trouver votre apk.
Les propriétés de votre version devraient ressembler à ceci:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Commencez évidemment par 0. :)