• slidebg1

Automatización de releases en Android


La publicación en producción de una app, puede ser a veces, un proceso algo pesado. Para completar esta fase es necesario realizar una serie de tareas, como la de distribución de betas, capturas de pantalla, traducciones para multi-idioma, firma de APK, etc., que pueden resultar muy laboriosas si no se automatiza de alguna manera. Además cuando también hay diferentes versiones de aplicación (freemium, premium...) la cosa se vuelve aún más tediosa.

El multi-idioma, por cierto, es  uno de los puntos que requiere de mucho tiempo y esfuerzo, a la hora de mantener y publicar una app. Por eso, antes de lanzarse a la piscina, dispuestos a mantener muchos idiomas, sugiero pararse a valorar si compensa o si por el contrario vale la pena ser menos ambiciosos en este punto , porque si se quiere hacer bien, un nuevo idioma supone nuevas traducciones para los textos de la app, nuevas traducciones de título y descripción en la ficha de Google Play o en la store que sea, nuevas traducciones para los textos de actualización de versión de la app y nuevas capturas de pantalla en el idioma correspondiente, entre otras cosas.

 

 

Pues bien, para evitarnos parte de todo este trabajo, vamos a comentar cosas que podemos hacer para automatizarlo. Principalmente comentemos tres puntos con los que automatizar nuestro proceso de distribución y publicación de una app en Android. Con la ayuda de Gradle y una serie de librerías de Android vamos a ahorrarnos mucho tiempo y trabajo.

  1. Distribución automática de Betas con Crashlytics

  2. Capturas de pantalla y generación de iconos para Google Play

  3. Firma automática de APK

 

Distribución de Betas con Crashlytics

 Si estamos utilizando Crashlytics en nuestra app, podemos hacer la generación y distribución de betas de manera automática, simplemente estableciendo unos parámetros de configuración básicos en nuestro fichero build.gradle del módulo de la app, en la parte donde se definen los build variants. De esta forma, parametrizamos los usuarios destino y las “release notes” para que al ejecutar el comando crashlyticsUploadDistributionRelease, se haga la distribución automaticamente. Ejemplo:

 

 

En este enlace se puede ver esto con más detalle:

https://docs.fabric.io/android/beta/gradle.html#distribution-with-gradle

 

Capturas de pantalla y generación de iconos para Google Play

 

Otra de las tareas por la que hay que pasar a la hora de publicar en Google Play es la de proveer los correspondientes iconos y pantallazos de nuestra app. Google Play, exige que aportemos un icono de 512 x 512 px y otro de 1024 x 500 px de nuestra app. Esto serán los iconos que verá el usuario en el buscador de apps. Y además exige que aportemos al menos 2 imágenes o pantallazos de nuestra app. Esto, de por sí, no resulta muy costoso, pero si nuestra app tiene multi-idioma, lo correcto es proveer los correspondientes iconos y pantallazos, ya que seguramente nuestra app tendrá textos de por medio que cambiarán según el idioma y esto es lo que acaba siendo un trabajo bastante costoso.

Es aquí donde vamos a empezar a delegar en Espresso, el framework de Android para realizar tests de interfaz de usuario. Gracias a Espresso, a las JUnit Rules y a la librería Spoon, podemos hacer la captura de cada pantalla de nuestra app en el idioma correspondiente de forma automatizada.

 

Reglas JUnit

 

Las reglas JUnit, se expresan mediante una anotaciones, y sirven para interceptar las llamadas al método de test y nos permite hacer algo antes y después de la invocación. En nuestro caso vamos a utilizar una @Rule, que nos facilitará el manejo de permisos para almacenar las capturas de pantalla. En concreto utilizaremos GrantPermissionRule, que viene incluida en la librería de Espresso. Y una @ClassRule para la parte de “Locales”, que se encargará de ejecutar el test en cada idioma que deseemos. Esta tendremos que implementarla nosotros de la siguiente forma:

 

 

 

Spoon Screenshots

 

Para hacer capturas de pantalla basta con agregar la dependencia de gradle de la librería cliente de Spoon. Para que puedan guardarse las capturas de pantalla, su aplicación debe tener el permiso WRITE_EXTERNAL_STORAGE.

 

 

Para hacer una captura en algún punto del test, es tan fácil como esto:

 

 

Aquí muestro un ejemplo de UITest que hace uso de las Reglas de JUnit y de Spoon para automatizar los screenshots en 7 idiomas:

 

 

Firma automática de APK

 

Y por último veamos cómo firmar nuestra APK, de forma automática en Android Studio ya que Android exige que todos los APK se firmen digitalmente con un certificado para poder instalarse.

 

Configurar el proceso de compilación para que firme automáticamente tu APK

En Android Studio, puedes configurar tu proyecto para firmar el APK de lanzamiento de manera automática durante el proceso de compilación generando una configuración de firmas y asignándola a tu tipo de compilación de lanzamiento. Una configuración de firma consta de una ubicación y contraseña de keystore, y un alias y una contraseña de clave. Para generar una configuración de firma y asignarla a tu tipo de compilación de lanzamiento usando Android Studio, sigue estos pasos: 

  1. En la ventana Project, haz clic con el botón secundario en tu aplicación y luego con el primario en Open Module Settings.

  2. En la ventana Project Structure, sección Modules del panel izquierdo, haz clic en el módulo que desees firmar.

  3. Haz clic en la pestaña Signing y luego en Add +

  4. Selecciona el archivo de tu keystore, ingresa un nombre para esta configuración de firma y la información requerida.

 

 Ventana de creación de una configuración nueva de firma.

 

     5. Haz clic en la pestaña Build Types.

     6. Haz clic en la compilación release.

     7. En Signing Config, selecciona la configuración que acabas de crear.

 

Selección de una configuración de firma en Android Studio. 

     8. Haz clic en OK.


Ahora, cada vez que compiles tu tipo de compilación de lanzamiento usando Android Studio, el IDE firmará el APK automáticamente con la configuración que especificaste. Puedes encontrar tus APK firmados en la carpeta build/outputs/apk/ dentro del directorio del proyecto del módulo que compiles.

 

Conclusión

 

La automatización de tareas, es básica a la hora de hacer distribuciones y publicar una app. Aquí sólo hemos comentado algunas de ellas que nos van a ahorrar bastante trabajo y ni siquiera hemos llegado a hablar de Integración Continua, tema que podemos dejar para otro post. También es cierto que existen herramientas muy potentes como fastlane para automatizar los procesos de publicación y distribución, pero tiene el inconveniente de no ser oficialmente compatible con todos los sistemas operativos, por eso, para redactar este post, he querido basarme únicamente en tareas de Gradle y librerías oficiales como Espresso y Spoon disponibles para Android.

 

Recursos

 

https://docs.fabric.io/android/beta/gradle.html#distribution-with-gradle

http://www.andreamaglie.com/2016/a-test-rule-for-setting-device-locale/

https://www.kotlindevelopment.com/runtime-permissions-espresso-done-right/

https://www.polidea.com/blog/Android_Espresso_4_tools_you_should_be_using/

https://developer.android.com/studio/publish/app-signing.html?hl=es-419#secure-shared-keystore






Públicado el 03/01/2018

Comparte este post: