Come mantenere la versione gratuita / a pagamento dell'app separata in subversion

8

Ho un'applicazione a pagamento sul mercato Android, tuttavia, voglio rilasciare una versione gratuita supportata da annunci pubblicitari.

Il modo più semplice che ho pensato di fare è stato quello di creare un ramo sul mio repository di subversion che ha il codice aggiuntivo per aggiungere gli annunci. Tuttavia, quando sono andato a inviare questo al mercato Android, richiedono nomi di pacchetti univoci. Questa soluzione non funziona più per me perché dovrei cambiare il pacchetto di ogni file di classe, il che renderebbe molto doloroso unire il tronco e il ramo.

Qual è il modo migliore per tenere insieme questi due progetti, condividere le patch, ma con un pacchetto diverso?

    
posta Malfist 18.04.2012 - 15:51
fonte

5 risposte

9

Hai preso in considerazione le direttive del compilatore ?

Esempio:

#define FREE
// ...
#if FREE
Console.WriteLine("Free version");
#else
Console.WriteLine("Paid version");
#endif

Puoi mantenere lo stesso identico codice base e indirizzare le due build usando due script di compilazione separati o uno parametrico.

msbuild /p:DefineConstants=FREE

Per farlo con Java, leggi questo e this . E forse questo .

    
risposta data 18.04.2012 - 16:15
fonte
5

Solo il pacchetto dell'applicazione deve essere unico. Vedi qui . Questo è il pacchetto dichiarato nel file manifest. Puoi avere la maggior parte del tuo codice in com.mydomain.myapp e avere solo un'attività principale diversa in com.mydomain.myapp.free .

    
risposta data 18.04.2012 - 16:54
fonte
3

Se vuoi davvero separarlo, il modo migliore è configurarlo come due parti dello stesso repository. In questo modo puoi almeno unire le modifiche tra i diversi rami. Se vuoi mantenere le cose completamente separate, farai un sacco di file patch di schlepping.

L'ho fatto e francamente non è una grande strategia nella pratica. Molto meglio, specialmente in ambienti compilati, è avere un processo di compilazione separato gratuito rispetto a pagato, quindi c'è una base di codice piuttosto che due. Se ci sono due codebases, sarà divergente.

    
risposta data 18.04.2012 - 16:15
fonte
0

Il controllo della versione è un modo scadente di gestire cose come questa. Finirai con un incubo di manutenzione: due applicazioni separate che devono essere quasi identiche.

Hai considerato una soluzione a più progetti? (Caveot: In realtà non l'ho fatto, ma sembra fattibile, e penso che Android lo consentirà. Ci proverò più tardi e vedremo di sicuro.) Compilare tutto il codice della tua app in un progetto principale jar . Quindi crea due app Android separate, una per la tua versione a pagamento e una per la versione gratuita. Questo risolverà il problema di denominazione del pacchetto. Queste app si limiteranno a delegare al jar principale praticamente tutto, tranne che la versione dell'annuncio includerà il codice per supportare gli annunci.

Potresti anche trovare questa discussione su un argomento simile interessante.

    
risposta data 18.04.2012 - 16:42
fonte
0

Costruire la tua app utilizzando feature toggle ti consentirebbe di raggiungere il tuo obiettivo ma potresti dover rielaborare un sacco di codice.

Definendo 2 (vorrei raccomandare 3) l'ambiente contenitore delle caratteristiche in un file .ini come:

[paid]
features.ads = false
features.featureOne = true
features.featureTwo = true
features.premiumFeature = true
features.underDevFeature = false
features.debug = false;

[free:paid]
features.ads = true
features.premiumFeature = false

; And the optionnal third
[development:paid]
features.debug = true
features.underDevFeature = true

In questo modo, hai una versione uniforme e che richiede solo un ramo nella tua origine controllo di controllo

Nei tuoi script specifici devi controllare se la funzione è autorizzata, in caso contrario, non visualizzarla

    
risposta data 18.04.2012 - 17:39
fonte

Leggi altre domande sui tag