Cambiar el androide gradle versionCode forma la línea de comandos

Tengo un archivo build.gradle en mi aplicación android con esta configuración:

android { ... defaultConfig { applicationId "some.app.id" versionName '1.2' versionCode 3 ... } ... } 

Mi AndroidManifest.xml no contiene versionCode y no contiene versionName.

Ahora quiero construir esta aplicación en Jenkins y pasar BUILD_NUMBER como un versionCode para la aplicación, por lo que cada compilación tiene una versión superior.

Así que en el trabajo me hava una llamada:

 ./gradlew -PversionCode=$BUILD_NUMBER clean build 

Cuando uso "versionCode" para cambiar el nombre de "app-release.apk" el valor de versionCode es el mismo que se pasa desde la línea de comandos:

 applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "MyApp_" + "_v" + versionName + "." + versionCode + ".apk")) } } 

Resumen

Así que tengo un valor por defecto de "versionCode" establecido en 3, pero al construir en Jenkins quiero anularlo desde la línea de comandos.

El problema

El problema es que en AndroidManifest dentro de la aplicación build .apk tiene versionCode establecido en 3 en lugar de valor de BUILD_NUMBER. Lo he comprobado con "badging aapt volcado"

La pregunta

¿Puede este valor "versionCode" de android defaultConfig ser superado por el parámetro de línea de comandos?

Sé, yo podría utilizar una función como se explica en: http://robertomurray.co.uk/blog/2013/gradle-android-inject-version-code-from-command-line-parameter/ pero prefiero el camino más limpio De simple anulación pero no puedo conseguir que funcione.

Puede utilizar propiedades definiéndolas en un archivo gradle.properties , consulte la documentación de gradle . Pero tendrás que tener mucho cuidado con los nombres que usas para tus propiedades: si usas versionName esa propiedad tendrá el valor correcto en gradle (puedes println ) pero no terminará en AndroidManifest.xml! Así que decidí usar 'versName'. (No sé lo suficiente sobre gradle para entender por qué esto es tan …)

Por lo tanto, en las gradle.properties del proyecto, puede definir las siguientes propiedades: versCode=3 versName=1.2

A continuación, cambie el archivo build.gradle en:

 android { ... defaultConfig { applicationId "some.app.id" versionName versName as Integer versionCode versCode ... } ... } 

Ahora puede anularlos en la línea de comandos de la siguiente manera: ./gradlew -PversCode=4 -PversName=2.1.3 clean build

  • Uso de Jenkins para construir un proyecto de gradol android falla
  • Jenkins And Android Construir
  • Calabash-android - error instalando APK - remoto Sistema de archivos de sólo lectura
  • Artefacto de correo electrónico de Jenkins para cada compilación
  • Cobertura de código de Android en Jenkins CI
  • Cómo poner bzr revid en Android de manifiesto: versionName
  • Construyendo un proyecto de Android Studio en Jenkins? Android.compileSdkVersion está ausente
  • Error al crear aplicaciones Android con Jenkins y Gradle en la plataforma linux centos
  • Jenkins Git Editor: ¿Cómo cometer el código de nuevo a maestro después de la construcción?
  • ¿Cómo puedo realizar mis pruebas independientes de Robotium UI en paralelo?
  • ¿Creando la preparación de la firma y de la liberación de apps android en jenkins / hudson?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.