Estou construindo um aplicativo Android com o gradle. Até agora usei o arquivo Manifest para aumentar o versionCode, mas gostaria de ler o versionCode de um arquivo externo e dependendo se é a versão de lançamento ou a versão de depuração, aumente o versionCode. Tentei as propriedades extras, mas você não consegue salvá-las, o que significa que da próxima vez que eu construir, estou obtendo o mesmo versionCode. Qualquer ajuda seria muito bem vinda!
project.ext{
devVersionCode = 13
releaseVersionCode = 1
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile project(':Cropper')
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar')
}
def getReleaseVersionCode() {
def version = project.releaseVersionCode + 1
project.releaseVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getDevVersionCode() {
def version = project.devVersionCode + 1
project.devVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getLastVersioName(versionCode) {
return "0.0." + versionCode
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard.cfg'
debuggable false
signingConfig null
zipAlign false
}
debug {
versionNameSuffix "-DEBUG"
}
}
productFlavors {
dev {
packageName = 'com.swisscom.docsafe.debug'
versionCode getDevVersionCode()
versionName getLastVersioName(project.devVersionCode)
}
prod {
packageName = 'com.swisscom.docsafe'
versionCode getReleaseVersionCode()
versionName getLastVersioName(project.releaseVersionCode)
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '1.8'
}
Respostas:
Estou certo de que existem inúmeras soluções possíveis; Aqui está um:
Este código espera um
version.properties
arquivo existente , que você criaria manualmente antes de ter o primeiro buildVERSION_CODE=8
.Este código simplesmente altera o código de versão em cada compilação - você precisaria estender a técnica para lidar com seu código de versão por variação.
Você pode ver o projeto de amostra de controle de versão que demonstra esse código.
fonte
assembleRelease.finalizedBy incrementVersion
ou semelhante. Vou postar meu código depois de arrumá-lo../gradlew incrementVersionCode build
. As tarefas chamadas sequencialmente dessa maneira serão interrompidas assim que qualquer uma das tarefas falhar.versionCode getIncrementingVersionCode()
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:
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 .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ção
gradle 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. :)
======================================================== ==
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
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:
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:
Obviamente, comece com 0. :)
fonte
Uma versão um pouco mais restrita da excelente resposta do CommonsWare cria o arquivo de versão se ele não existir:
fonte
if(versionPropsFile.exists())
garante que ele não exploda se o arquivo não estiver lá.versionProps.store(versionPropsFile.newWriter(), null)
substitui o arquivo, independentemente de ele já existir.?:
significava em Groovy. O operador Elvis é um encurtamento do operador ternário.Observei algumas opções para fazer isso e, no final das contas, decidi que era mais simples usar apenas a hora atual para o versionCode em vez de tentar incrementar automaticamente o versionCode e fazer o check-in em meu sistema de controle de revisão.
Adicione o seguinte ao seu
build.gradle
:No entanto, se você espera fazer upload de compilações além do ano 2696, pode usar uma solução diferente.
fonte
1510351294
:))Outra maneira de obter um
versionCode
automaticamente é definirversionCode
o número de commits nogit
branch em check-out . Ele cumpre os seguintes objetivos:versionCode
é gerado automaticamente e de forma consistente em qualquer máquina (incluindo umContinuous Integration
e / ouContinuous Deployment
servidor).versionCode
ser submetido ao GooglePlay.Usando a biblioteca gradle-git para cumprir os objetivos acima. Adicione o código abaixo ao diretório
build.gradle
do seu arquivo/app
:NOTA: Para que este método funcione, é melhor implantar apenas na Google Play Store da mesma filial (por exemplo,
master
).fonte
Recentemente, eu estava trabalhando em um plugin gradle para Android que torna a geração de versionCode e versionName automaticamente. há muita personalização. aqui você pode encontrar mais informações sobre ele https://github.com/moallemi/gradle-advanced-build-version
fonte
Outra opção, para incrementar o
versionCode
e oversionName
, é usar um carimbo de data / hora.A partir de 1 de janeiro de 2022 formattedDate = date.format ('yyMMddHHmm') excede a capacidade de inteiros
fonte
Para incrementar versionCode apenas na versão de lançamento, faça isso:
espera um
c://YourProject/app/version.properties
arquivo existente , que você criaria manualmente antes da primeira construção para terVERSION_CODE=8
Arquivo
version.properties
:VERSION_CODE=8
fonte
Criar arquivo
version.properties
Mudança
build.gradle
:}
Resultado :
1.1.3.6
fonte
Defina versionName em
AndroidManifest.xml
android{...}
Bloco interno nobuild.gradle
nível do aplicativo:android{...}
Bloco externo dentrobuild.gradle
do nível do aplicativo:Depois de criar o APK marcado:
Nota: Se o seu versionName for diferente do meu, você precisa alterar o regex e extrair a lógica das partes .
fonte
Os exemplos mostrados acima não funcionam por diferentes razões
Aqui está minha variante pronta para uso com base nas ideias deste artigo:
fonte
Créditos para CommonsWare (resposta aceita) Paul Cantrell (Criar arquivo se ele não existir) ahmad aghazadeh (nome e código da versão)
Então eu juntei todas as suas ideias e cheguei a isso. Esta é a solução de arrastar e soltar exatamente para o que o primeiro post pediu.
Ele atualizará automaticamente o versionCode e versionName de acordo com o status da versão. Claro, você pode mover as variáveis para atender às suas necessidades.
fonte
Usando o Gradle Task Graph , podemos verificar / alternar o tipo de compilação.
A ideia básica é incrementar o versionCode em cada construção. Em cada construção, um contador armazenado no arquivo version.properties . Ele será mantido atualizado a cada nova construção de APK e substituirá a string versionCode no arquivo build.gradle por este valor de contador incrementado.
Coloque o script acima dentro do arquivo build.gradle do módulo principal.
Site de referência: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
Obrigado e cumprimentos!
fonte
fonte
na versão Gradle 5.1.1 no mac ive mudou a forma como os nomes das tarefas são recuperados, eu embora tentei obter o tipo / tipo de compilação da compilação, mas estava com preguiça de dividir o nome da tarefa:
o código é de @just_user este aqui
fonte
Existem duas soluções de que gosto muito. O primeiro depende da Play Store e o outro depende do Git.
Usando a Play Store, você pode incrementar o código da versão observando o maior código de versão carregado disponível . O benefício desta solução é que o upload de um APK nunca falhará, pois o código da sua versão é sempre um maior do que o que está na Play Store. A desvantagem é que distribuir seu APK fora da Play Store se torna mais difícil. Você pode configurar isso usando o Gradle Play Publisher seguindo o guia de início rápido e dizendo ao plug-in para resolver os códigos de versão automaticamente :
Usando Git, você pode incrementar o código da versão com base em quantos commits e tags seu repositório possui. O benefício aqui é que sua saída é reproduzível e não depende de nada fora do seu repo. A desvantagem é que você precisa fazer um novo commit ou tag para alterar seu código de versão. Você pode configurar isso adicionando o plug - in Version Master Gradle :
fonte