Aquí viene una modernización de mi respuesta anterior que se puede ver a continuación. Este se ejecuta con Gradle 4.4 y Android Studio 3.1.1 .
Qué hace este script:
- Crea un archivo version.properties si no existe ninguno (vote a favor la respuesta de Paul Cantrell a continuación, que es de donde saqué la idea si le gusta esta respuesta)
- Para cada compilación, versión de depuración o cada vez que presione el botón de ejecución en Android Studio, el número de VERSION_BUILD aumenta.
- Cada vez que ensambla una versión, su código de versión de Android para Play Store aumenta y su número de parche aumenta.
- Bonificación: una vez finalizada la compilación, copia tu apk
projectDir/apk
para que sea más accesible.
Este script creará un número de versión similar v1.3.4 (123)
y creará un archivo apk como AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Versión principal: debe cambiarse manualmente para cambios más importantes.
Versión secundaria: debe cambiarse manualmente para cambios un poco menos importantes.
Versión del parche: aumenta cuando se ejecutagradle assembleRelease
Versión de compilación: aumenta cada compilación
Número de versión: Igual que la versión de parche , esto es para el código de versión que Play Store debe aumentar para cada nueva carga de apk.
Simplemente cambie el contenido en los comentarios etiquetados 1 - 3 a continuación y el script debería hacer el 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 {
...
}
}
================================================ ==
RESPUESTA INICIAL:
Quiero que versionName aumente automáticamente también. Así que esto es solo una adición a la respuesta de CommonsWare que funcionó perfectamente para mí. Esto es lo que funciona para mi
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
EDITAR:
Como soy un poco vago, quiero que mi control de versiones funcione lo más automáticamente posible. Lo que quiero es tener una versión de compilación que aumente con cada compilación, mientras que el número de versión y el nombre de la versión solo aumentan cuando hago una compilación de lanzamiento.
Esto es lo que he estado usando durante el año pasado, los conceptos básicos son de la respuesta de CommonsWare y mi respuesta anterior, y algo más. Esto da como resultado el siguiente control de versiones:
Nombre de la versión: 1.0.5 (123) -> Major.Minor.Patch (Build), Major y Minor se cambian manualmente.
En 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!")
}
...
}
...
El parche y el código de versión aumentan si ensambla su proyecto a través de la terminal con 'ensamblar' , 'ensamblarRelease' o 'aR' que crea una nueva carpeta en la raíz de su proyecto llamada apk / RELEASE para que no tenga que revisar la compilación / salidas / más / más / más para encontrar su apk.
Las propiedades de su versión deberían verse así:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Obviamente comienza con 0. :)