Android Flavors
Francisco Manuel López Jurado Colaboraciones 27/01/2017
Con Android Studio y Gradle tenemos la posibilidad de configurar los denominados “flavors” que nos harán más fácil el desarrollo y la posibilidad de crear distintas configuraciones de entornos, literales, recursos, etc dentro de una misma aplicación. Normalmente se suelen usar para los distintos entornos a los que puede apuntar una app. En el ejemplo que vamos a seguir en este post configuraremos tres entornos distintos: Producción, Preproducción y Desarrollo. ¡Vamos a ello!
Primer paso, añadir los Flavors
Para crear los distintos flavors en nuestra aplicación tenemos que editar el fichero build.gradle de nuestra app. Añadimos el tag productFlavors y dentro de él añadimos tantos flavors como queramos.
Podemos añadir configuraciones de firma, recursos, dependencias, nombre de la versión, código de las distintas versiones, etc. En definitiva, podemos configurarlos completamente.
Segundo paso, añadir configuraciones
Podemos añadir distintas variables para nuestro flavor, para ello sólo tenemos que añadir la siguiente línea en cada uno de los flavors. Siempre indicando el tipo, nombre y valor.
buildConfigField 'String', 'ENDPOINT', '"http://www.tuapienpro.com"'
Pero… ¿Y cómo accedemos a esta variable?
Pues muy fácil, solo tenemos que añadir la siguiente línea desde cualquier parte de nuestro código:
BuildConfig.ENDPOINT
Tercer paso, ¿cómo compilamos los distintos flavors?
Tenemos que dirigirnos a BuildVariants en la esquina inferior izquierda y después elegir el flavor que queramos compilar.
Si queremos filtrar variantes que no deseamos que aparezcan en el desplegable de Build Variant, por ejemplo “preRelease” ya que no tiene mucho sentido que compilemos para release una versión de desarrollo, podemos añadir un filtro tal como este:
De esta forma solo aparecerán “preDebug”, “devDebug” y “proRelease”.
Después de lo siguiente nos quedará un fichero build.gradle tal y como este:
Cuarto paso, añadir distintos recursos para los flavors
Crearemos tantas carpetas de recursos como flavors tengamos, simplemente tenemos que seguir estos pasos:
- Creamos la carpeta.
Añadimos la carpeta haciendo click con el botón izquierdo encima de nuestro proyecto y luego New -> Android resource file
- Seleccionaremos el flavor y el nombre del recurso, por ejemplo strings
- Nos quedará la siguiente estructura:
Después editamos el strings.xml de cada flavor añadiendo los recursos que queramos.
Por ejemplo en el strings.xml de mi flavor “dev”, en la variable “app_name”, yo la he editado con “FlavorsBetabeersDev”.
Podemos hacer lo mismo para las imágenes. En este caso tendremos que añadir las carpetas “drawable”, “drawable-hdpi”, “mipmap-hdpi”, etc.
¡Bonus!, añadir distintas firmas
Otra de las grandes opciones que podemos añadir son las firmas. Podemos asignar una firma distinta para cada flavor, quizás no le veas sentido a esto para el ejemplo que hemos seguido en el post pero piensa en la siguiente situación:
Hemos desarrollado un motor de juego que se trata de un generador de preguntas y respuestas. Queremos hacer distintas versiones de nuestro juego (motor, series, fútbol, etc), que los recursos cambien y hasta cambien las firmas puesto que son distintas aplicaciones pero todos compartiendo un mismo core.
En este caso si cobra sentido tener distintas firmas para luego poder subirlas a Google Play.
Pues para añadirlas tenemos que crear un nuevo tag llamado signingConfigs y en él crear las distintas firmas de nuestra app. Por ejemplo yo me he creado tres firmas (reléase, pre y dev).
Para asignar las firmas a nuestros flavors solo tenemos que hacer lo siguiente:
- Añadimos dentro de nuestro productFlavors las siguientes variables
def releaseSigningVariable = signingConfigs.release
def preSigningVariable = signingConfigs.pre
def devSigningVariable = signingConfigs.dev
- Dentro de cada flavor asignamos el signingConfig para cada flavor, por ejemplo para el caso de “pre” quedaría:
signingConfig preSigningVariable
Finalmente sería:
En resumen, conseguimos hacer perfiles de nuestra aplicación de una forma muy detallada y fácil, consiguiendo implementar el menor código posible y reutilizando la mayor cantidad de código. ¡Espero que te haya gustado!