Contenido del curso

Modularización Android: core y feature modules

Resumen

La modularización en Android es la estrategia que te permite desacoplar el código, separarlo por responsabilidades y hacerlo testeable, escalable y rápido de compilar. Si vienes desarrollando con un solo repositorio y sientes que cada cambio te cuesta minutos de compilación, aquí está la salida.

¿Por qué modularizar tu proyecto Android?

Cuando separas tu aplicación en módulos, el sistema guarda en caché y precompila cada uno de ellos. Así, al modificar una parte específica, el procesador solo recompila el módulo afectado, no toda la aplicación.

Esto te trae tres beneficios concretos:

  • Compilaciones más rápidas porque solo se reconstruye lo que cambió.
  • Código testeable, ya que cada módulo tiene responsabilidades claras.
  • Escalabilidad real, porque puedes crecer sin que todo se enrede.

¿Qué es la modularización en Android? Es la práctica de dividir el código de tu app en módulos independientes con responsabilidades específicas, para desacoplar capas, acelerar la compilación y facilitar el mantenimiento.

¿Qué problemas trae el monorepo en Android?

Un monorepo es un solo repositorio que contiene todos los paquetes de tu aplicación. Suena cómodo porque no necesitas configurar nada, todo está listo desde el inicio. Pero ahí mismo está la trampa.

¿Cuáles son las desventajas reales del monorepo?

Estos son los dolores típicos cuando trabajas con un solo repositorio:

  • Genera dependencias circulares entre paquetes.
  • Cualquier librería, por ejemplo una de networking, puede usarse desde cualquier parte del repositorio sin control.
  • Un cambio mínimo obliga al sistema a recompilar todo el código, porque no puede detectar qué cambió y qué no.
  • Promueve un acoplamiento alto, ya que cualquier paquete puede consumir lo que quiera de otro.

Entonces sí, configurar un monorepo es fácil, pero el costo lo pagas cada vez que pulsas build.

¿Cómo aplicar clean architecture en Android?

Una primera forma de modularizar es con clean architecture, un enfoque que separa el proyecto en tres capas claras.

¿Qué hace cada capa de clean architecture?

  • Capa de data: aquí viven las librerías propias de Android. Es donde el framework hace su trabajo.
  • Capa de dominio: contiene Java y Kotlin puro. Aquí están los helpers, los data class, los modelos de datos y las abstracciones.
  • Capa de presentación: la parte visual, con fragments, vistas y activities.

Esta separación funciona y ya marca una diferencia frente al monorepo. El detalle es que las capas necesitan interactuar mucho entre sí, y eso puede limitarte cuando el proyecto crece. Por eso existe una mejor alternativa.

¿Qué es una arquitectura mixta con core y feature modules?

La recomendación práctica es combinar módulos core con feature modules. Esta arquitectura mixta te da control fino sobre las dependencias y elimina los problemas heredados del monorepo.

¿Qué son los módulos core?

Los módulos core manejan funciones transversales que toda la aplicación necesita. Algunos ejemplos directos:

  • Navegación, porque siempre necesitas saber cómo moverte entre pantallas.
  • Networking, para centralizar las llamadas a servicios.
  • Seguridad, para mantener una sola fuente de verdad sobre autenticación y cifrado.

Estos módulos están separados y se reutilizan desde cualquier feature que los requiera.

¿Qué son los feature modules?

Un feature module representa una funcionalidad concreta de tu sistema. Por cada feature tienes un módulo, y ese módulo solo declara las dependencias que realmente usa: los módulos core que necesita y las librerías específicas que consume.

¿Cuál es la diferencia entre core modules y feature modules? Los core modules contienen funciones transversales reutilizables como navegación, networking o seguridad. Los feature modules encapsulan funcionalidades concretas del producto y dependen solo de los core que necesitan.

Con esta arquitectura mixta logras tres cosas que el monorepo no te daba:

  • Mitigas los errores típicos del repositorio único.
  • Reduces los tiempos de compilación al aislar cambios por módulo.
  • Eliminas las dependencias circulares, porque cada módulo declara explícitamente de qué depende.

Y aquí viene lo interesante: cuando un equipo crece, esta separación es la que te permite que varias personas trabajen en features distintas sin pisarse el código ni romperse las compilaciones.

Si llevas tiempo desarrollando solo la parte visual de tus apps, este tipo de decisiones arquitectónicas son las que marcan la diferencia entre un proyecto que escala y uno que se vuelve inmanejable. Cuéntame en los comentarios qué arquitectura usas hoy en tus proyectos Android.