Estoy creando una aplicación de Android con gradle. Hasta ahora usé el archivo Manifest para aumentar el versionCode, pero me gustaría leer el versionCode de un archivo externo y dependiendo de si es el tipo de lanzamiento o el tipo de depuración, aumentar el versionCode. Probé las propiedades adicionales, pero no puede guardarlas, lo que significa que la próxima vez que lo construya obtendré el mismo código de versión. ¡Cualquier ayuda sería muy apreciada!
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'
}
Respuestas:
Estoy seguro de que hay varias soluciones posibles; acá hay uno:
Este código espera un
version.properties
archivo existente , que crearía a mano antes de tener la primera compilaciónVERSION_CODE=8
.Este código simplemente agrega el código de la versión en cada compilación; necesitaría extender la técnica para manejar su código de versión por sabor.
Puede ver el proyecto de ejemplo de control de versiones que muestra este código.
fuente
assembleRelease.finalizedBy incrementVersion
o algo similar. Publicaré mi código una vez que lo haya ordenado../gradlew incrementVersionCode build
. Las tareas llamadas secuencialmente de esta manera se detendrán tan pronto como falle alguna de las tareas.versionCode getIncrementingVersionCode()
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:
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 .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 ejecuta
gradle 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. :)
================================================ ==
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
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:
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í:
Obviamente comienza con 0. :)
fuente
Una versión ligeramente ajustada de la excelente respuesta de CommonsWare crea el archivo de versión si no existe:
fuente
if(versionPropsFile.exists())
asegura que no explote si el archivo no está allí.versionProps.store(versionPropsFile.newWriter(), null)
sobrescribe el archivo independientemente de si ya existe.?:
significaba en Groovy. El operador de Elvis es una abreviatura del operador ternario.Miré algunas opciones para hacer esto, y finalmente decidí que era más sencillo usar la hora actual para el versionCode en lugar de intentar incrementar automáticamente el versionCode y registrarlo en mi sistema de control de revisiones.
Agregue lo siguiente a su
build.gradle
:Sin embargo, si espera cargar compilaciones posteriores al año 2696, es posible que desee utilizar una solución diferente.
fuente
1510351294
:))Otra forma de obtener una
versionCode
automáticamente es establecerversionCode
el número de confirmaciones en lagit
rama extraída. Cumple los siguientes objetivos:versionCode
se genera de forma automática y coherente en cualquier máquina (incluido un servidorContinuous Integration
y / o unContinuous Deployment
servidor).versionCode
se puede enviar a GooglePlay.Usar la biblioteca gradle-git para lograr los objetivos anteriores. Agregue el siguiente código a su
build.gradle
archivo el/app
directorio:NOTA: Para que este método funcione, es mejor implementar solo en Google Play Store desde la misma sucursal (p. Ej.
master
).fuente
Recientemente, estaba trabajando en un complemento de Gradle para Android que hace que la generación de versionCode y versionName se genere automáticamente. hay mucha personalización. aquí puede encontrar más información al respecto https://github.com/moallemi/gradle-advanced-build-version
fuente
Otra opción, para incrementar el
versionCode
y elversionName
, es usar una marca de tiempo.A partir del 1 de enero de 2022, formattedDate = date.format ('yyMMddHHmm') supera la capacidad de Integers
fuente
Para incrementar versionCode solo en la versión de lanzamiento, hazlo:
espera un
c://YourProject/app/version.properties
archivo existente , que crearía a mano antes de la primera compilación para tenerVERSION_CODE=8
Archivo
version.properties
:VERSION_CODE=8
fuente
Crea un archivo
version.properties
Cambio
build.gradle
:}
Salida:
1.1.3.6
fuente
Definir versionName en
AndroidManifest.xml
Dentro del
android{...}
bloquebuild.gradle
del nivel de la aplicación:android{...}
Bloqueo exteriorbuild.gradle
del nivel de la aplicación:Después de crear APK chamuscado:
Nota: Si su versionName es diferente de my, necesita cambiar la expresión regular y extraer la lógica de las partes .
fuente
Los ejemplos que se muestran arriba no funcionan por diferentes razones
Aquí está mi variante lista para usar basada en ideas de este artículo:
fuente
Créditos a CommonsWare (Respuesta aceptada) Paul Cantrell (Crear archivo si no existe) ahmad aghazadeh (Nombre y código de la versión)
Así que reuní todas sus ideas y se me ocurrió esto. Esta es la solución de arrastrar y soltar para exactamente lo que pidió la primera publicación.
Actualizará automáticamente el versionCode y versionName según el estado de la versión. Por supuesto, puede mover las variables para adaptarlas a sus necesidades.
fuente
Usando Gradle Task Graph podemos verificar / cambiar el tipo de compilación.
La idea básica es incrementar el versionCode en cada compilación. En Cada construye un contador almacenado en el archivo version.properties . Se mantendrá actualizado en cada nueva compilación de APK y reemplazará la cadena versionCode en el archivo build.gradle con este valor de contador incrementado.
Coloque el script anterior dentro de su archivo build.gradle del módulo principal.
Sitio web de referencia: http://devdeeds.com/auto-increment-build-number-using-gradle-in-android/
¡Gracias y Saludos!
fuente
fuente
en la versión de Gradle 5.1.1 en mac ive cambió la forma en que se recuperaron los nombres de las tareas, aunque intenté obtener el sabor / tipo de compilación a partir de la compilación, pero fui perezoso para dividir el nombre de la tarea:
el código es de @just_user este
fuente
Hay dos soluciones que me gustan mucho. El primero depende de Play Store y el otro depende de Git.
Con Play Store, puede incrementar el código de versión mirando el código de versión cargado más alto disponible . El beneficio de esta solución es que la carga de un APK nunca fallará, ya que el código de su versión es siempre uno más alto que el de Play Store. La desventaja es que distribuir tu APK fuera de Play Store se vuelve más difícil. Puede configurar esto usando Gradle Play Publisher siguiendo la guía de inicio rápido y diciéndole al complemento que resuelva los códigos de versión automáticamente :
Con Git, puedes incrementar el código de la versión según la cantidad de confirmaciones y etiquetas que tenga tu repositorio. El beneficio aquí es que su salida es reproducible y no depende de nada fuera de su repositorio. La desventaja es que tienes que hacer una nueva confirmación o etiqueta para aumentar tu código de versión. Puede configurar esto agregando el complemento Version Master Gradle :
fuente