Código de versión con Xamarin a través de VSTS en Google Play

¿Es posible de alguna manera, o cuál es el mejor escenario para actualizar programáticamente el código de la versión y el nombre de la versión en una aplicación Android Mobile?

Para una aplicación mobile que utilizamos:

  • Xamarin para el desarrollo de Android
  • Visual Studio Team Services para control de versiones (Git), construcción, testing y lanzamiento.
  • Google play para distribución.

nuestro flujo de continuous integration es como:

Visual studio (xamarin) -> Git(Code) -> Build -> Test(Xamarin testcloud) -> Release Google Play (Alpha/Beta/Production) 

Actualmente tengo que actualizar manualmente el código / nombre de la versión antes de comprometerme con Git, de lo contrario, en el otro extremo del flujo, Google se quejará de que el número de versión de la nueva aplicación es menor o igual que la apk que ya se encuentra en Play Store.

Sin embargo, dado que nos comprometemos mucho y comstackmos versiones automáticamente, solo queremos boost el nombre / código de versión solo en una versión exitosa (en caso de que Google lo rechace). Esto causó este pequeño dilema: Porque entonces el AndroidManifest, donde reside el versionamiento, ya está empacado en un APK firmado y comprimido.

Otra cosa es: estamos trabajando con múltiples desarrolladores en el proyecto, por lo que la actualización manual puede causar condiciones de carrera, por lo que la mejor manera es (lo que creemos) de actualizar los numbers de versión justo antes del lanzamiento .

Cosas en las que pensé:

  • almacenando el número de versión en algún lugar de VSTS
  • usando el número de compilation como el número de versión
  • obteniendo el número de versión actual a través de la API de desarrollador de Google Play

Pero todavía un poco trabado y buscando una práctica común / mejor

Caspar,

Tomé el enfoque de modificar el manifiesto antes de comstackr / empaquetar la aplicación, porque una vez que comienzas a comstackr, empaquetar, firmar, alinear con cremallera, es lo último en el process.

En la definición de compilation, como primera tarea, antes de la tarea de compilation, agregue una tarea que actualizará el manifiesto:

  • En el Catálogo de tareas / Utilidad, agregue una secuencia de commands de PowerShell
  • Establecer como en línea

Argumentos:

 -filePath '$(FilePath)' -oldValue '$(OldValue)' -newValue '$(NewValue)' 

Guión:

 param ([string] $filePath, [string] $oldValue, [string] $newValue) Write-Host "---Replacing value $oldValue with new value $newValue in file $filePath---" $content = [System.IO.File]::ReadAllText($filePath).Replace("$oldValue", $newValue) [System.IO.File]::WriteAllText($filePath, $content) 

El parámetro $ filePath es la ruta a su manifiesto, como por ejemplo:

 $(Build.SourcesDirectory)\MyAndroidApp\Properties\AndroidManifest.xml 

El parámetro $ oldValue sería la propiedad del código de versión:

 android:versionCode="1" 

El parámetro $ newValue sería la nueva propiedad del código de la versión:

 android:versionCode="$(AndroidVersionCode)" 

"$ (AndroidVersionCode)" podría ser una variable en su definición de compilation, permitida en el time de queue o el número de compilation.


Le di el path simple, pero para su mantenimiento y conveniencia aproveché los grupos de tareas de VSTS. Al final, mi script para replace text en file es un grupo de tareas y puedo usarlo en cualquier definición de compilation.

Terminas con algo como esto: Definición de compilación