¿Debo crear una sucursal para la versión gratuita de mi aplicación de Android?

Tengo una aplicación de Android que es una aplicación de pago y me gustaría hacer una versión gratuita. El código fuente será el 95% el mismo para la versión gratuita. Estoy usando git para el control de código fuente y mi idea inicial es crear una twig libre del master para poder combinar fácilmente los cambios de la versión de pago en la gratuita.

¿Es esta la estrategia correcta teniendo en count que algunos de los cambios en la twig free nunca se fusionarán nuevamente en el master ?

Otras opciones son:

  1. Creando otro repository para la versión gratuita
  2. Manteniendo todo en master y creando código de biblioteca que es usado tanto por la versión gratuita como por la paga

Preferiría mantener el código junto y usar compilation condicional y / o bibliotecas de complementos "pagas" en las sucursales. Se supone que una twig representa la desviación del tree fuente durante el desarrollo. Las twigs no deben usarse para mantener bases de código separadas.

Puede crear un maestro pago y un maestro libre. Usando la técnica de flujo de git para administrar sus nuevas características y correcciones de errores.

Con el sistema de compilation gradle , puede crear diferentes "sabores" para su aplicación.

android { ... defaultConfig { ... } signingConfigs { ... } buildTypes { ... } productFlavors { paid { applicationId "donturner.app.paid" versionName "1.0-paid" } free { applicationId "donturner.app.free" versionName "1.0-free" } } }

A continuación, puede crear carpetas de origen adicionales para estos sabores de compilation que se pueden utilizar para proporcionar diferentes implementaciones. P.ej. app/src/free/java/ClassWithDifferences.java proporcionaría la app/src/paid/java/ClassWithDifferences.java implementación "gratuita" app/src/paid/java/ClassWithDifferences.java .

Nota: el código en la app/src/main/ es compartido entre todos los sabores; por lo tanto, no debe haber app/src/main/java/ClassWithDifferences.java . Y asegúrese de utilizar estos sabores correctamente, por ejemplo, una class que solo existe en el sabor libre no debe ser referenceda en main, ni en paid.