android git android-studio gradle versioning

Gradle script para la autoversión e incluye el commit hash en Android



git android-studio (5)

Creé un plugin de Gradle para hacer esto por ti. El proyecto y las instrucciones completas están en https://github.com/lessthanoptimal/gversion-plugin

Para usarlo, agrega lo siguiente a tu archivo build.gradle

plugins { id "com.peterabeles.gversion" version "1.2.4" } gversion { srcDir = "src/main/java/" classPackage = "com.your.package" className = "MyVersion" // optional. If not specified GVersion is used dateFormat = "yyyy-MM-dd''T''HH:mm:ss''Z''" // optional. This is the default timeZone = "UTC" // optional. UTC is default }

Ahora solo necesita ejecutar la tarea de gradle ''createVersionFile'' para crear el archivo. Es posible que desee considerar agregar la siguiente línea a su proyecto gradle project.compileJava.dependsOn(createVersionFile) Esto hará que genere el archivo cada vez que Gradle construya el proyecto. Consulte el sitio web anterior para obtener instrucciones de Android.

Así es como se ve el archivo

/** * Automatically generated file containing build version information. */ public class MyVersion { public static final String MAVEN_GROUP = "com.your"; public static final String MAVEN_NAME = "project_name"; public static final String VERSION = "1.0-SNAPSHOT"; public static final int GIT_REVISION = 56; public static final String GIT_SHA = "a0e41dd1a068d184009227083fa6ae276ef1846a"; public static final String BUILD_DATE = "2018-04-11T12:19:03Z"; public static final long BUILD_UNIX_TIME = 1523449143116L; }

También es posible que desee agregar el archivo de versión a su .gitignore ya que se autogenera y no lo quiere en git.

Necesito escribir un script de Gradle para la versión automática de mi aplicación en cada confirmación. También necesito incluir el commit hash como referencia en la aplicación para testers.

Estoy confundido de cómo funcionan las versiones automáticas. ¿Alguien puede explicar el proceso de autoevaluación?


Encontré un problema similar, pero no quise modificar el versionName para incluir el hash git. Queríamos mantener eso como algo como 1.2.2, pero todavía tenemos la posibilidad de mostrar el hash git en la interfaz de usuario.

Modifiqué el código de la otra respuesta aquí para usar la tarea buildConfigField para generar un valor de BuildConfig.GitHash al que se puede hacer referencia en el código de Java.

Agregue esto encima de la sección de Android del archivo build.gradle de su módulo:

def getGitHash = { -> def stdout = new ByteArrayOutputStream() exec { commandLine ''git'', ''rev-parse'', ''--short'', ''HEAD'' standardOutput = stdout } return stdout.toString().trim() }

A continuación, agregue la siguiente línea a la sección defaultConfig sección de android de build.gradle, es decir, debajo de versionName :

buildConfigField "String", "GitHash", "/"${getGitHash()}/""

Esto genera la siguiente línea en el archivo BuildConfig.java generado automáticamente:

// Fields from default config. public static final String GitHash = "e61af97";

Ahora puedes obtener el hash git en tu código Java con BuildConfig.GitHash .


Si desea agregar una identificación de confirmación después de versionName, se ve como 1111-abcdefg

agregue a continuación en su aplicación / build.gradle sobre la sección de Android (no en la raíz build.gradle)

def getVersionName = { -> def stdout = new ByteArrayOutputStream() exec { commandLine ''git'', ''rev-parse'', ''--short'' , ''HEAD'' standardOutput = stdout } return stdout.toString().trim() }

agrega debajo en android {defaultConfig {HERE}}

versionNameSuffix ''-''+getVersionName()


También vale la pena mirar grgit - Groovy / Gradle Git , que puede ayudar a simplificar la extracción de información, incluyendo Git commit-hashes, en un script de Gradle.


Una solución ideal podría ser tomar la versión del estado de git del proyecto. De esta manera, el control de versiones no depende de que recuerde aumentar una variable, o cambie cualquier texto en los archivos gradle o config. Otra ventaja es la trazabilidad del nombre y el código de la versión a un estado de código específico.

Puede encontrar un ejemplo descriptivo en http://ryanharter.com/blog/2013/07/30/automatic-versioning-with-git-and-gradle/

La idea es obtener la información de git con la función getVersionName, y usar esa función en el script de Gradle:

/* * Gets the version name from the latest Git tag */ def getVersionName = { -> def stdout = new ByteArrayOutputStream() exec { commandLine ''git'', ''describe'', ''--tags'' standardOutput = stdout } return stdout.toString().trim() }

Por supuesto, debe tener disponible la línea de comando git (como se ejecutará el comando git describe --tags para generar la información).

Otro enfoque (basado también en obtener la información de versión de git) podría ser la externalización de esa lógica a un complemento de Gradle, como por ejemplo: https://github.com/moallemi/gradle-advanced-build-version https://github.com/infusionsoft/gradle-build-version-plugin - https://github.com/nemerosa/versioning

El que use dependerá del tipo de política de control de versiones que desee aplicar.