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

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

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

Gracias

Encontré un problema similar, pero no quise modificar el versionName para include 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 reference en el código de Java.

Agregue esto encima de la sección de Android del file build.gradle de su module:

 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 file BuildConfig.java generado automáticamente:

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

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

Una solución ideal podría ser tomar la versión del estado de git del proyecto. De esta forma, el control de versiones no se basa en que recuerde boost una variable, o cambie cualquier text en los files gradle o config.

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

La idea es get la información de git con la function getVersionName, y usar esa function en el script de Gradle.

Otro enfoque (basado también en get la información de la versión de git) podría ser este, como un complemento de Gradle: https://github.com/GeoNet/gradle-build-version-plugin

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()