¿Cómo diseñar una aplicación Android con múltiples comportamientos?
Estamos inmersos en el desarrollo de una aplicación Android para la versión KitKat 4.4 (API 19) o superior y tenemos muchas dudas a la hora de plantear la arquitectura. La cuestión es que esta app debería estar compuesta por un core que haga y exponga lo básico (login, obtención y manejo de un contexto mínimo y poco más que las activities de inicio y preferencias) y posteriormente pueda incorporar distintas características o funcionalidades en base a distintos criterios (localización geográfica, tipo de usuario, etc). Intentando hacer una analogía, imaginemos que el Core fuera el inicio de sesión y la pantalla de configuración de Facebook y el resto de módulos cosas como el álbum de fotos, el buscador de amigos, etc, que aunque su funcionalidad básica esté bien definida deben poder tener distintos comportamientos en base a un parámetro (por ejemplo, que el álbum de fotos se organice de maneras distintas en función a si un usuario es de latinoamérica o de europa).
Con esto en mente hemos estado estudiando Android Developers y nos hemos encontrado con distintas formas de enfocarlo (módulos, variantes de compilación, flavours, etc), y toneladas de información que procesar. Parecería que los tiros van por diseñar distintos módulos para cada característica y luego, de alguna forma, organizar los modos de compilación para que incluya unos u otros, pero nos siguen quedando dudas como si podríamos detectar que un módulo esté presente o no en la app, cómo plantear el multicomportamiento de un módulo reutilizando el código de manera óptima, si luego vamos a poder sacar APKs con la configuración de módulos que queramos, etc... Y el tiempo apremia.
Cualquier consejillo o comentario de algún experto que se haya enfrentado a algo similar, o incluso anécdotas de situaciones parecidas en apps de este tipo, será altamente apreciado. Siempre es gratificante descubrir cómo se enfrentó otro desarrollador a un desafío para aprender de ello y mejorar uno mismo.