Utilizando las Variantes de Construcción de Gradle
() translation by (you can also view the original English article)
Introducción
Una de las funcionalidades esenciales de Android Studio es la integración de Gradle como sistema de construcción. Mientras que el propósito general de un sistema de construcción es tomar el código fuente y construir un archivo instalable para el usuario, un APK en el caso de Android, Gradle proporciona una funcionalidad mas amplia.
Gradle se encarga de la gestión de dependencias, como los archivos JAR locales, archivos nativos .so y librerias alojadas en Maven. También proporciona una configuración sencilla de las propiedades del proyecto y ayuda a los desarrolladores a crear diferentes versiones de sus aplicaciones de una manera bastante sencilla. El último aspecto, las variantes de construcción, es lo que vamos a tratar en este artículo.
1. Que son la Variantes de Construcción?
Variantes de construcción(builds) son construcciones específicas que puedes producir con Gradle, basadas alrededor de código fuente compartido. Mientras que una app estándar puede tener los tipos de construcción debug(depuración) y release(lanzamiento), puedes ampliarlos añadiendo flavour dimensions.
Flavour dimensions te permite usar la estructura de directorios de tu proyecto para cambiar el aspecto y comportamiento de las construcciones individuales hacia los usuarios. Esto posibilita a los desarrolladores el producir múltiples apps similares con diferentes estilos y configuraciones.
2. Configurando Variantes de Construcción en Gradle
Puedes empezar abriendo el archivo build.gradle de tu proyecto y añadiendo un elemento flavorDimensions
dentro del nodo de construcción (build) android
.
1 |
flavorDimensions "number", "color" |
Esto define qué 'dimensiones' podrán usar tus variantes de construcción Cada construcción que definas debe tener un product flavor(sabor-de-producto) de cada una de las dimensiones. Esto significa que si sólo necesitas una dimensión para tus app, lo cual es habitual, entonces puedes cambiar la línea flavorDimensions
para definir sólo una.
Debajo de la definición de flavorDimensions
, puedes definir los productFlavors
. En este ejemplo, vamos a hacerlo sencillo y definiremos dos flavors('sabores') por dimension.
1 |
productFlavors { |
2 |
blue { |
3 |
applicationId "com.tutsplus.bluevariant" |
4 |
flavorDimension "color" |
5 |
}
|
6 |
green { |
7 |
applicationId "com.tutsplus.greenvariant" |
8 |
flavorDimension "color" |
9 |
}
|
10 |
|
11 |
one { |
12 |
flavorDimension "number" |
13 |
}
|
14 |
|
15 |
two { |
16 |
flavorDimension "number" |
17 |
}
|
18 |
}
|
Cada build(construcción) que crees necesitará una applicationId
única para diferenciarla de otros builds. Puesto que cualquier aplicación que construyas tendrá al menos un flavor de cada dimension, sólo necesitas definir el applicationId
en cada nodo para una dimension.
Ahora que has definido todo lo necesario para tus variantes de construcción en build.gradlle, puedes abrir el panel Build Variants en la esquina inferior izquierda de Android Studio para ver que variantes están disponibles para construir.
te habrás dado cuenta de que cada flavor que añades incrementa el número de variantes exponencialmente Fíjate también que los buildTypes (variantes) debug y release han sido incorporados a la matriz de dimensiones



3. Usando la Estructura del Proyecto
Aunque ya puedes instalar diferentes versiones de tu app, no hay nada que las distinga unas de otras. Aqui es donde puedes sacar provecho del sistema de construcción de Gradle
Gradle usa la estructura de carpetas de un projecto para determinar que archivos serán usados para compilar la app. En la estructura de tu proyecto, en app/src/, verás el directorio main. Ahi es donde tu código Java y los recursos principales son almacenados. Puedes añadir directorios adicionales junto a main que correspondan a los product flavors de tu app para asi adaptar recursos para cada variante de construcción.
Cualquier elemento que exista en un product flavor que también haya sido definido en main automáticamente tendrá prioridad.



Podemos ver esto en acción abriendo main/res/values/colors.xml. Si tu proyecto aún no tiene definido un valor colorPrimary
, ve y defínelo ahora. Si has creado un proyecto vacío para seguir este tutorial, deberías ver un valor predefinido de #3F51B5
. Al ejecutar la aplicación debería usarse el valor colorPrimary
como el color de la Toolbar
en la app.



Si creas un archivo nuevo colors.xml en gree/src/values/, puedes sobreescribir el atributo colorPrimary
con un valor diferente. En este caso, vamos a usar #00FF00
.
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<resources>
|
3 |
<color name="colorPrimary">#00FF00</color> |
4 |
</resources>
|
Cuando hayas creado el archivo y definido el color, vuelve al panel Build Variants de Android Studio y selecciona la variante de construcción oneGreenDebug. Ya puedes compilar y ejecutar esa variante de la app.



Incluso si la variante verde ha cambiado el color de la toolbar, el resto de propiedades de main no han sido sobreescritas. Esto te permite establecer tus propiedades comunes en main y cambiar sólo lo que debería ser diferente.
No sólo funciona con colores, sino que puedes cambiar cualquier cosa dentro de las carpetas de recursos, como strings, estilos, dimensiones e integers. Combinado con las carpetas de recursos anotadas, como values-xhdpi para dispositivos de mayor densidad de pixeles, podrás controlar con precisión lo que el usuario ve en tu app para asegurarte de que tenga la mejor experiencia posible.
Además de esto, puesto que tienes diferentes valores para applicationId
establecidos para cada una de las dimensiones de color, puedes instalar varias versiones de la misma app en un dispositivo.
Conclusión
Gradle es una poderosa herramienta que no sólo crea APKs, sino que te permite tener un control preciso en la personalización de tus construcciones. En este articulo has aprendido cómo crear variantes de construcción de tu aplicación con diferentes recursos para facilitarte la creación de aplicaciones parecidas en una mínima parte del tiempo que te llevaría crearlas por separado.
Aunque Gradle es todavía un sistema de construcción relativamente nuevo, ha demostrado ser tan increíblemente útil que todo desarrollador Android debería usarlo con comodidad
¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!