capitan apps

android

Distribuye tus apps automaticamente (Firebase app distribution).

Tiempo de lectura: 5 minutos

Usualmente cuando comenzamos a a profesionalizarnos nos encontramos con el problema de que debemos enviar nuestras aplicaciones a los testers (Quality Assurance – QA) y a los managers (Products Owners – PO ó en casos CEO), y aun monton de gente que necesita tener acceso a estas apps, aunque aveces ni las vea.

Y estas aplicaciones deben de ser generadas, probadas y enviadas desde 1 vez cada 15 dias, hasta varias veces el mismo dia.

Teniendo esta situación que se repite durante muchas veces durante muchos dias, podemos darnos cuenta que es mucho el tiempo que se consume haciendo tareas que no son para lo que nos pagan, que es crear código.

En lo general me considero pro automatización (sin exagerar) de mis aplicaciones, divido las automatizaciones en 2 vias: pruebas y releases.

En este post pretendo mostrar la manera más basica de enviar tus aplicaciones a beta mediante Firebase app release, en otros post profundizaremos más en otros repositorios (App Center) ó artifactories(Nexus, JFrog) y entornos (Jenkins, Github actions).

Consideraciones:

  1. Esta forma de distribución es la más estandar para Android.
  2. Necesitaras acceso a la cuenta de Firebase.
  3. Necesitaras acceso a la cuenta de Google API console.

¿Cuales son los pasos a seguir?

1. Lo primero que debemos de hacer es crear nuestro proyecto en firebase. (Si ya tienes la cuenta de firebase para la aplicación creada, pasa al punto 3).

2. Agregar Firebase a la aplicación android.

3. Crear la configuración en Google Cloud Console.

4. Configuración de nuestro proyecto para crear la tarea de publicación.

1. Utilizar el proyecto en Firebase.

El primer paso es crear la cuenta de firebase para el proyecto, en este proyecto viviran las aplicaciones android, iOs y web.

Debemos de ir al sitio de Firebase (https://console.firebase.google.com/) y nos solicitara los siguientes datos para crear la cuenta:

  1. Nombre del proyecto de Firebase.
  2. Nombre del proyecto en google analitycs.

El nombre para este proyecto es “POC-android-tests“; Usualmente utilizamos los mismos nombres para que quede uniforme entre las consolas de google.

Mira nuestro post de como configurar firebase con exceso de detalles: https://capitanapps.com/configuracion-basica-de-firebase-en-mi-proyecto

PROMOTION

END PROMOTION

2. Agregar firebase a la aplicación android.

En nuestra cuenta recien creada (POC-android-tests) vamos a crear la aplicación android, la cual contendra la configuración del bundle (paquete) de la app; Para esto debemos entrar a nuestro proyecto.

La configuración nos solicitara lo siguiente:

  1. El paquete (bundle) de la app.
    • Puedes encontrar el bundle en el archivo: TU_APP -> app -> build.gradle
  2. El Nombre de la app.

En el segundo paso de la configuración descargamos el archivo google-services.json, el cual utilizaremos para configurar firebase.

[POST de configuración firebase]

3. Crear/Utilizar el proyecto en Google Cloud Console.

Vamos a pasar a la Google Cloud Console (https://console.cloud.google.com), en esta consola crearemos una cuenta (sin usuario ni contraseña), la cual tendra permisos para subir aplicaciones a firebase automaticamente.

Lo primero que debemos de hacer es crear una Cuenta de Servicio (Service Account).

La configuración nos solicitara lo siguiente:

  1. Nombre de la cuenta de servicio (ejemplo: poc-app-distribution-service-account).
  2. El rol ó permiso para la cuenta de servicio ->Firebase Admin SDK Administration Service Agent.

Si tienes más de un proyecto, deberas de seleccionar el proyecto al deseado, del selector de Proyectos.

PROMOTION

END PROMOTION

Ahora debemos de generar el API Key de la aplicación (En formato JSON); La cual descargaremos en nuestra computadora; el nombre sera algo parecido a: poc-android-tests-964d11907569.json

4. Configuración de nuestro proyecto para crear la tarea de publicación.

Es momento de abrir nuestro Android Studio.

Vamos a descargar los plugins necesarios en nuestro proyecto.

En la raiz del proyecto, editamos el archivo build.gradle. (TU_APP -> build.gradle).

buildscript {
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        // Google play services classpath.
        classpath 'com.google.gms:google-services:4.3.15'
        // Firebase app distribution classpath.
        classpath 'com.google.firebase:firebase-appdistribution-gradle:4.0.0'
    }
}

En nuestro app gradle vamos a agregar el plugin com.google.firebase.appdistribution, que nos creara las tareas para publicar.

Ahora, en nuestra app, editamos el archivo build.gradle. (TU_APP -> app -> build.gradle).

plugins {
  id 'com.android.application'
  // plugin firebase.
  id 'com.google.gms.google-services'
  // plugin app distribution.
  id 'com.google.firebase.appdistribution'
}

[CREAR VIDEO]

Como vemos, el plugin nos ha creado la tarea appDistributionUploadDebug y appDistributionUploadRelease.

Ahora, lo siguiente sera utilizar nuestra Cuenta de Servicio (Service account), para esto crearemos una estructura de carpetas, con la finalidad de mantener nuestros archivos de configuración organizados.

Utilizamos la vista de Proyecto, para crear la estructura de carpetas; crearemos la carpeta setup y dentro de ella app_distribution.

[CREAR VIDEO]

Dentro de la carpeta app_distribution, debemos de copiar el archivo descargado cuando se creo la Cuenta de Servicio (Service account); en mi caso el archivo se llama poc-android-tests-964d11907569.json.

[CREAR VIDEO]

Ahora el paso final es configurar la tarea de distribución en gradle.

En nuestra app, editamos el archivo build.gradle. (TU_APP -> app -> build.gradle).

plugins {
  id 'com.android.application'
  // plugin firebase.
  id 'com.google.gms.google-services'
  // plugin app distribution.
  id 'com.google.firebase.appdistribution'
}

// Firebase app distribution configuración.
firebaseAppDistribution {
   // Obtenemos el Folder del proyecto.
   def projectPath = project.projectDir.getAbsolutePath()
   // Entramos a la carpeta de configuracion.
   def folder = projectPath+"/setup/app_distribution/"
   serviceCredentialsFile = "${folder}poc-android-tests-964d11907569.json"
}

[CREAR VIDEO]

Para subir la versión debemos de ejecutar las siguientes tareas: assembleDebug y appDistributionUploadDebug.

[CREAR VIDEO]

Y como la idea de este post, es automatizar publicaciones y depender lo menos posible de humanos, crearemos nuestra propia tarea gradle, la cual se encargara de ligar todos nuestras tareas automaticamente.

En nuestra app, editamos el archivo build.gradle. (TU_APP -> app -> build.gradle).

plugins {
 ...
}

// Tarea para liberar mi app a Firebase app distribution
task _myAppPublish  {
    // Tarea de limpieza para eliminar cualquier version previa.
    dependsOn 'clean'
    // Tarea que compila y genera el apk.
    dependsOn 'assembleDebug'
    // Tarea que ejecuta nuestras pruebas unitarias.
    dependsOn 'test'
    // Tarea que distribuye la app.
    dependsOn 'appDistributionUploadDebug'

    doLast {
        println("Exito al subir MI APP a firebase app distribution")
    }
}

dependencies {
 ...
}

[CREAR VIDEO DE ARCHIVO]

Ahora ejecutamos nuestra tarea.

[CREAR VIDEO DE COMO SE PUBLICA]

En modo vida real, es muy posible que no cuentes con los accesos Productivos de la aplicación, por lo cual recomiendo (usualmente yo lo hago), es tener una llamada con el dueño de la cuenta e irle diciendo donde vaya seleccionando y descargando los archivos necesarios para la configuración.



Aquí hay otros temas android que otras personas están viendo en este momento.

Recommended Reads