Aí vem uma modernização da minha resposta anterior, que pode ser vista abaixo. Este está sendo executado com Gradle 4.4 e Android Studio 3.1.1 .
O que este script faz:
- Cria um arquivo version.properties se não houver nenhum (vote na resposta de Paul Cantrell abaixo, que é de onde eu tirei a ideia se você gostar desta resposta)
- Para cada versão, versão de depuração ou sempre que você pressiona o botão de execução no Android Studio, o número VERSION_BUILD aumenta.
- Cada vez que você monta um lançamento, seu código de versão do Android para a play store aumenta e o número do patch aumenta.
- Bônus: depois que a compilação for concluída, copie seu apk para
projectDir/apk
para torná-lo mais acessível.
Este script criará um número de versão semelhante v1.3.4 (123)
e construirá um arquivo apk como AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Versão principal: deve ser alterado manualmente para alterações maiores.
Versão secundária: deve ser alterado manualmente para alterações um pouco menos grandes.
Versão do patch: aumenta durante a execuçãogradle assembleRelease
Versão de compilação: aumenta a cada compilação
Número da versão: igual à versão do patch , é para o código da versão que a Play Store precisa ter aumentado para cada novo upload do apk.
Basta alterar o conteúdo nos comentários marcados de 1 a 3 abaixo e o script fará o 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 {
...
}
}
======================================================== ==
RESPOSTA INICIAL:
Quero que o versionName aumente automaticamente também. Portanto, este é apenas um acréscimo à resposta do CommonsWare que funcionou perfeitamente para mim. Isto é o que funciona para mim
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
EDITAR:
Como sou um pouco preguiçoso, quero que meu controle de versão funcione da forma mais automática possível. O que eu quero é ter uma versão de compilação que aumente com cada compilação, enquanto o número da versão e o nome da versão só aumentam quando eu faço uma compilação de lançamento.
Isso é o que tenho usado no ano passado, o básico é da resposta de CommonsWare e minha resposta anterior, além de mais algumas. Isso resulta no seguinte controle de versão:
Nome da versão: 1.0.5 (123) -> Major.Minor.Patch (Build), Major e Minor são alterados manualmente.
Em 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 aumentam se você montar seu projeto por meio do terminal com 'assemble' , 'assembleRelease' ou 'aR' que cria uma nova pasta na raiz do seu projeto chamada apk / RELEASE para que você não tenha que olhar para build / outputs / mais / mais / mais para encontrar seu apk.
As propriedades de sua versão precisam ser assim:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Obviamente, comece com 0. :)