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