Qué son y qué ventajas aportan los flavors para el desarrollo de aplicaciones Android.
Desde el inicio de los tiempos a los desarrolladores se nos ha pedido implementar aplicaciones con las mismas funcionalidades para distintos clientes, versiones gratuitas, de prueba o de pago de una misma aplicación, o simplemente una versión de desarrollo y una de producción.
Tradicionalmente esto implicaba tener varios proyectos y modificarlos según nuestras necesidades, siendo un trabajo laborioso, teniendo que copiar y pegar las mejoras que hacíamos en un proyecto para que estuviesen disponibles en todos los proyectos o ir cambiando las llamadas a las diferentes Apis o modificar las variables de entorno. En fin, un dolor de cabeza, pero gracias a Android Studio se nos ha dado a los desarrolladores una herramienta muy potente para solucionar este problema, los flavors.
En este artículo no vamos a explicar cómo se configuran o se programan los flavors, para eso esta la guía de desarrollo de Android, sino que se va a explicar qué son y qué ventajas aportan para el desarrollo de aplicaciones Android.
Los flavors nos permiten hacer distintas variantes de un mismo producto de manera sencilla, de esta forma podemos cambiar rápidamente de una compilación a otra. Pero ¿qué es lo que podemos cambiar con los flavors? ¡¡Pues prácticamente todo!! ya sean recursos gráficos, funcionalidades, constantes o variables de compilación.
Pero vamos a ver unos pocos casos de uso para hacernos una idea de su potencia.
Entornos de servidor
Es muy común que para el desarrollo de una aplicación se utilicen diferentes entornos durante el desarrollo, cosa que desde Tyris Software recomendamos encarecidamente, de esta forma el backend y el frontend pueden hacer todos sus desarrollos en un entorno de desarrollo seguro y sólo si funciona correctamente pasarlo al entorno de producción sin poner en riesgo los datos del usuario.
Anteriormente teníamos que cambiar las Urls a las que apuntaba la aplicación manualmente cada vez que queríamos cambiar de entorno, pero actualmente podemos programar que distintos flavors apunten a los diferentes entornos, de esta forma cambiar de entorno se conseguiría con un único click.
Una aplicación para diferentes clientes
Imaginemos que tenemos una aplicación de comida para llevar, la cual vendemos de manera personalizada para cada cliente. Entiéndase en este caso que un cliente es una de casa de comida.
En este caso crearemos un flavor distinto para cada cliente, primero cambiaremos las llamadas a las Apis, ya que cada cliente tendría su propio servidor, podríamos pensar que solo devolviendo imágenes y menús distintos desde el servidor ya estaría, pero la realidad es que el cliente no quiere que se vea como una aplicación prefabricada, por lo que nos pide que el color nativo de su aplicación y los iconos sean distintos, también nos puede pedir que la distribución de los elementos dentro de una vista sea distinta, así que en el flavor tendremos que crear recursos específicos para el cliente, los cuales se mostrarán en lugar de los recursos por defecto.
Simplemente cambiando de flavor conseguiremos que las aplicaciones de nuestros distintos clientes parezcan distintas, pero manteniendo una base común, por lo que cualquier mejora que hagamos de la parte común inmediatamente la tendremos en todas las aplicaciones de nuestros clientes.
Modificar un módulo común
Esto quiere decir que en un mismo proyecto tenemos varias aplicaciones con una parte en común que es compartida. En Tyris Software nos hemos visto expuestos a esta necesidad en diferentes ocasiones. En una de ellas, tuvimos la necesidad de hacer dos versiones de una misma aplicación, una para móviles y otra para TV, como ambas aplicaciones tienen toda la parte de las llamadas al servidor y tratamiento de los datos en común elegimos crear un proyecto con tres módulos, tal como se explica en el artículo: ¿Cómo convive una aplicación de Android y AndroidTV en Google Play?
Aunque la mayor parte de la lógica es común, puede haber detalles o funcionalidades que cambien, como el número de elementos a mostrar en una vista, la funcionalidad de un método, o un interceptor. Por todos estos pequeños cambios debemos crear dos flavors distintos: uno para TV y otro para móvil en el módulo común, los cuales nos cambiarán los valores de éstas constantes o las operaciones de las funciones según el flavor seleccionado. Además, estos flavors se deben de llamar desde el módulo de TV o el módulo de móvil, según corresponda, por lo que tenemos que vincular los flavors del módulo común a los otros módulos.
Una vez configurado, podremos cambiar fácilmente de una compilación a otra y reutilizar la mayor parte del código, el cual es compartido.
Simplemente cambiando de flavor conseguiremos que las aplicaciones de nuestros distintos clientes parezcan distintas, pero manteniendo una base común, por lo que cualquier mejora que hagamos de la parte común inmediatamente la tendremos en todas las aplicaciones de nuestros clientes.
De estos tres ejemplos de uso podemos extraer que el uso de los flavors nos facilita bastante el replicar aplicaciones parecidas, así como hacer múltiples variantes de un mismo producto, tal vez parezca un poco confuso al principio, pero lo cierto es que con los flavors todos los cambios se realizan sólo una vez, en lo que se denomina variante, y una vez configurado se cambia de una variante a otra con un solo click.
Desde Tyris Software recomendamos el uso de los flavors para el desarrollo de los proyectos, ya que nos permite, de forma sencilla, el desarrollo en entornos de prueba, cambiar la estética del producto final y reutilizar una gran cantidad de código.
Al final todo esto se traduce en un ahorro de tiempo de desarrollo, es decir, en una reducción del coste del producto, por lo que los márgenes de beneficio serán mayores para un mismo producto.