Configuración Aplicaciónes para debug y release
Con los cambios para la integración continua es necesario cambiar la forma en que se configuran los valores de QA y Producción de las aplicaciones. Actualmente lo que se realiza es tener archivos de configuración dentro del código java de las aplicaciones, se comenta y descomenta dependiendo del ambiente que se va ha liberar. Esto debe cambiar y el siguiente manual trata de explicar el como se configuran estos valores desde el archivo gladle.
Configuración de variables para debug y reléase.
Cuando se requiere configurar alguna constante como el caso de las urls que cambia dependiendo el ambiente se pueden declarar desde la propiedad buildTypes y dentro de las etiquetas release o debug, se crea la variable que puede ser utilizada. EJ
Para hacer uso de esas variables, se mandan llamar con la clase BuildConfig + el nombre de la variable.
Res Values.
También en ocaciones es necesario tener valores de recursos que sean parametrisables, por ejemplo el nombre de la aplicación, colores diferentes, para esto se utiliza la propiedad resValue, puede ser usada para propiedades de tipo: string, color, bool,array, etc.
Esta es llamada dentro del BuildConfig.
El llamado de estos recursos se realiza de la misma forma en que si son creados desde los archivos xml.
ApplicationID – Diferente.
Si se requiere que la aplicación de debug y la productiva tengan un applicationId diferente, ya sea para que los registros de logs sean diferentes o que se puedan instalar en el mismo dispositivo, se puede configurar 1 prefijo a la aplicación. Se configura en la propiedad buildTypes dentro del gradle:
defaultConfig {
applicationId "mx.com.telstock"
}
buildTypes {
release { applicationIdSuffix ".dci" } debug { applicationIdSuffix ".dci_d" }
}
De esta manera se generaría por ejemplo un paquete mx.com.telstock.dci_d para la app de debug y el paquete mx.com.telstock.dci para la app de release. Importante: En caso de que se haya utilizado firebase es necesario agregar ambos aplicationID al proyecto.
Configuracion de productFlavors:
En ciertos proyectos es necesario tener configuraciones de recursos o funcionalidades diferentes, p.e. En DCI-Intervali, es la misma aplicación, pero hace uso de drawables diferentes. En estos casos se utilizan los productosFlavors.
Para crear 1 productFlavor este se crea debajo de la propiedad buildType.
De esta manera ya podemos tener 1 aplicación que va poder hacer uso de recursos compartidos y cada 1 va ha poder tener recursos propios.
Después de ejecutar el sync al gradle, si abrimos desde Android studio la ventana de build variants, podremos ver que se nos despliegan los relese y debug para cada 1 de las aplicaciones.
Después de esto es necesario crear las carpetas de los flavors que creamos, en este caso DCI e intervali, en la carpeta de src del proyecto al mismo nivel que main.
En cada una de las carpetas se crean los directorios java y res.
En el directorio java se crea el mismo paquete de main.
Main va a contener todos los recursos y funcionalidades que compartirá la aplicación, y en las carpetas dci e intervali, será los recursos y funcionalidades propias de cada proyecto.
En el caso de ejemplo solo son los drawables los que varían de aplicación, por lo que se copiaran los drawables para cada aplicación en la respectiva carpeta de res en cada directorio.
Al generar las aplicaciones, se generaran con un paquete diferente y con los recursos diferentes, En caso p.e. que tengan configuraciones de colores o string diferentes se podrían crear sus archivos propios para cada aplicación o se pueden crear desde el archivo gradle como propiedades resValue.
Paginas a consultar:
https://developer.android.com/studio/build/application-id https://developer.android.com/studio/build/build-variants?hl=ES https://developer.android.com/studio/build/build-variants?hl=ES#sourcesets https://bluefletch.com/blog/specifying-your-android-host-url-using-gradle/