Manteniendo proyectos Android similares

Actualmente tenemos una aplicación que es esencialmente una demostración completamente funcional para clientes potenciales. Toda la funcionalidad está ahí. Sin embargo, utilizamos marcas / logotypes generics, llamamos a nuestros propios web services (que luego se intercambiarán para llamadas a web services de clientes), etc.

Aquí está mi pregunta. Si tenemos dos clientes diferentes, preferiríamos la menor cantidad de código duplicado posible. Entiendo que esto podría hacerse, desde una perspectiva java, simplemente incluyendo un JAR compartido. Sin embargo, necesitaremos cambiar los resources. Además, un cliente puede no desear alguna funcionalidad que otro cliente desee. Además de esto, si estamos haciendo correcciones de errores generales, normalmente querremos que estas correcciones estén en ambas versiones de la aplicación.

Estamos usando Git para el control de versiones y Maven para build el proyecto.

Una opción que discutimos es simplemente ramificar el proyecto y mantener versiones separadas. Sin embargo, entonces tendríamos que fusionar manualmente los cambios que queremos reflejados en todas las versiones de la aplicación.

Otra opción que discutimos es de alguna manera intercambiando resources, etc. usando perfiles maven. Sin embargo, si necesitamos hacer cambios no superficiales en el código en sí, esto podría ser un problema. Es posible que tengamos que entrar en fábricas y diferentes implementaciones.

¿Alguien tiene recomendaciones sobre la mejor manera de manejar esto?

Usamos un proyecto de biblioteca con submodules de git para manejar todos nuestros proyectos similares. El proyecto maestro es bastante importante, pero usamos un file de configuration para determinar qué características deberían estar en el producto final.