Ecco una modernizzazione della mia precedente risposta che può essere vista di seguito. Questo funziona con Gradle 4.4 e Android Studio 3.1.1 .
Cosa fa questo script:
- Crea un file version.properties se non esiste (vota in alto la risposta di Paul Cantrell di seguito, da cui ho avuto l'idea se ti piace questa risposta)
- Per ogni build, versione di debug o ogni volta che si preme il pulsante di esecuzione in Android Studio, il numero VERSION_BUILD aumenta.
- Ogni volta che si organizza una versione Android versionCode per Play Store aumenta e il tuo numero di patch aumenta.
- Bonus: al termine della compilazione copia il tuo apk in
projectDir/apk
per renderlo più accessibile.
Questo script creerà un numero di versione che assomiglia v1.3.4 (123)
e costruirà un file apk come AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Versione principale: deve essere modificata manualmente per modifiche maggiori.
Versione secondaria: deve essere modificata manualmente per modifiche leggermente meno grandi.
Versione patch: aumenta durante l'esecuzionegradle assembleRelease
Versione build: aumenta ogni build
Numero versione: uguale alla versione patch , questo è per il codice della versione che Play Store deve aumentare per ogni nuovo caricamento di apk.
Basta cambiare il contenuto nei commenti etichettati 1 - 3 di seguito e lo script dovrebbe fare il resto. :)
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 {
...
}
}
================================================== ==
RISPOSTA INIZIALE:
Voglio che anche versionName aumenti automaticamente. Quindi questa è solo un'aggiunta alla risposta di CommonsWare che ha funzionato perfettamente per me. Questo è ciò che funziona per me
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
MODIFICARE:
Dato che sono un po 'pigro, voglio che il mio controllo delle versioni funzioni nel modo più automatico possibile. Quello che voglio è avere una versione build che aumenta con ogni build, mentre il numero di versione e il nome della versione aumentano solo quando creo una build di rilascio.
Questo è quello che ho usato nell'ultimo anno, le basi provengono dalla risposta di CommonsWare e dalla mia risposta precedente, più altre ancora. Ciò si traduce nel seguente controllo delle versioni:
Nome versione: 1.0.5 (123) -> Major.Minor.Patch (Build), Major e Minor vengono modificati manualmente.
In 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 e versionCode aumentano se assembli il tuo progetto tramite il terminale con 'assemble' , 'assembleRelease' o 'aR' che crea una nuova cartella nella root del tuo progetto chiamata apk / RELEASE in modo da non dover guardare attraverso build / output / more / more / more per trovare il tuo apk.
Le proprietà della tua versione dovrebbero assomigliare a questo:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Ovviamente inizia con 0. :)