Git rev-list no funciona en Android Studio build.gradle

Configuré mi Android Studio Project para trabajar con Github. Aquí está mi Manifext

apply plugin: 'com.android.application' def gitVersion() { def counter = 0 def process = "git rev-list master --first-parent --count".execute() counter = process.text.toInteger() return counter } android { compileSdkVersion 20 buildToolsVersion "20.0.0" def versionMajor = 0 def versionMinor = 1 def versionPatch = 0 defaultConfig { applicationId "com.my.packagename" minSdkVersion 15 targetSdkVersion 20 versionCode gitVersion() versionName "${versionMajor}.${versionMinor}.${versionPatch}" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } 

Sin embargo, cuando uso gitVersion () obtengo el siguiente error,

 Error:(7, 0) For input string: "" 

Para mí, esto significa que el process se devuelve una cadena vacía. Sin embargo, puedo ejecutar esto desde mi línea de command y get el resultado esperado.

¿Por qué sucede esto solo en Android Studio?

Encontré el problema. El estudio de Android realiza operaciones de línea de command en la carpeta del proyecto de forma pnetworkingeterminada. Hice mi proyecto de tal manera que el git repo vivía dentro de mi directory de aplicaciones en lugar de en mi directory de proyectos, por lo que cualquier command de git en el nivel del proyecto sería erróneo, ya que no sabía acerca del directory de git repo one.

Mi solución fue mover mi git repo del directory de la aplicación al directory del proyecto . Una vez que hice eso, el guión funcionó perfectamente.

Escribí y probé esa secuencia de commands para su uso en OSX Mavericks. ¿Qué tipo de plataforma de sistema operativo está utilizando para hacer su compilation? Además, ¿lo has intentado sin el ".text"? Puede que tenga que jugar con diferentes combinaciones en esa línea para ver qué funcionará.

Este método te ayudará a get tu número de revisión:

 int extractVersionCode() { def stdout = new ByteArrayOutputStream() exec { workingDir projectDir executable 'git' args 'rev-list', '--count', 'HEAD' standardOutput = stdout } return stdout.toString().trim().toInteger() } 

Uso:

 versionCode extractVersionCode() 

Prueba esto:

 def gitCommitCount = Integer.parseInt(['sh', '-c', 'git rev-list HEAD | wc -l | tr -d " "'].execute([], project.rootDir).text.trim()) defaultConfig { ... versionCode gitCommitCount ... }