2012-05-08 7 views
17

Ho creato una versione gratuita di un'app di gioco che è ora sul mercato con un nome come com.mycompany.myfreegame. Ora voglio fare una versione a pagamento. Ci saranno senza dubbio ritocchi e correzioni di bug ad entrambe le versioni richieste per gli anni a venire, quindi voglio incapsulare la codifica delle informazioni libere vs pagate in modo compatto possibile in modo che possa essenzialmente risolvere bug in entrambe le versioni contemporaneamente.Come mantenere una versione a pagamento e gratuita di un'app

Se l'interezza delle differenze tra le due versioni è stata gestita in fase di esecuzione, è stato possibile impostare un singolo flag nel codice sorgente e questa sarebbe la fine del problema. Purtroppo ci sono altre due cose da considerare,

  1. Il nome del pacchetto deve essere diverso tra le due versioni.
  2. Alcuni xml devono essere diversi. Ad esempio, la versione gratuita richiede layout lineari per contenere gli annunci, la versione a pagamento no.

Qual è il modo più semplice per raggiungere questo obiettivo?

+0

Non sarebbe più semplice gestire lo stato di registrazione dell'applicazione? Questo ti permetterebbe di avere un singolo progetto, e tutto quello che dovresti fare è semplicemente "nascondere" gli annunci, se è la versione a pagamento. –

+0

o utilizzando gli acquisti in-app del mercato? – Eonasdan

risposta

7

Penso che il primo approccio che proverò sia l'utilizzo di 3 progetti in Eclipse: uno per entrambe le versioni del gioco e un progetto di libreria con tutto il codice condiviso. Il progetto della libreria sarebbe dove tutto il codice per il tuo gameplay principale, e i progetti specifici della versione gestiscono il caricamento di layout diversi, inserendo annunci nella versione gratuita e aggiungendo livelli/funzionalità/cappelli alla versione a pagamento.

Potrebbe essere in grado di raggiungere l'obiettivo di una base di codice singolo con un flag del compilatore utilizzando un task ant, ma questo è oltre me.

+2

Questa è la soluzione che ho sempre cercato in passato. Anche se al giorno d'oggi, prenderei seriamente in considerazione l'acquisto di app per gli aggiornamenti. –

4

Penso che quello che state cercando è un Progetto Biblioteche http://developer.android.com/guide/developing/projects/index.html#LibraryProjects

Da quella pagina web:

If you are creating an application that exists in both free and paid versions. You move the part of the application that is common to both versions into a library project. The two dependent projects, with their different package names, will reference the library project and provide only the difference between the two application versions.

Un'altra domanda, molto simile a questo, sembra avere una discussione decente e risposta: Multiple Apps with a shared code base

Modifica: ecco un collegamento su come implementare un progetto di libreria. http://developer.android.com/guide/developing/projects/projects-eclipse.html

Per quanto riguarda le diverse versioni leggermente diverse, un progetto di biblioteca può ospitare. Il progetto della libreria viene creato per primo, quindi il genitore (il progetto che utilizza la libreria) viene creato per ultimo e viene unito. Entrambi i progetti possono definire gli stessi identificatori di risorse e il progetto costruito per ultimo (progetto principale), ottiene priorità (sovrascrive). Quindi, in sostanza, puoi sovrascrivere stringhe/layout (possibilmente di più, non sono sicuro?) Nell'applicazione padre/chiamante.

Ad esempio: Supponiamo di avere due progetti, gratuiti ea pagamento. È possibile creare una stringa con un'implementazione predefinita (versione gratuita) e sovrascriverla nella versione a pagamento (app principale).

codice nel file di librerie condivise strings.xml:

<string name="AppName">My Application (Free)</string> 

Codice in genitore Strings app.file xml:

<string name="AppName">My Application Premium</string> 
0

penso che siete alla ricerca di qualcosa di simile a questo:

Multiple Android Application Package .apk files from single source code

In sostanza, l'approccio più semplice è quello di avere due diversi file manifesto e le due diverse attività principali e l'interruttore la compilazione usando Ant, sebbene quest'ultima sia facoltativa.

Spero che aiuti.

3

Vorrei andare con Maven. È possibile definire un progetto di genitore con tre sotto-progetti, dite:

  • comune
  • Paid
  • libero

Maven permette di avere diversi file di configurazione, pur avendo la stessa base di codice.

Ad esempio, attualmente ho un progetto in cui vengono utilizzati due database, quindi tutti i file di configurazione dell'app rimangono su un progetto comune, in cui i file e le classi di configurazione del database rimangono su ogni cartella di progetto. Quando faccio un build nel genitore, ogni progetto figlio è costruito, test unitari passati, ecc ...

Inoltre, questo è solo uno dei mille vantaggi di Maven!

EDIT: ho appena scoperto, si dispone di un android-plugin per Maven, con caratteristiche fredde anche

+1

+1 - Uso Maven per gestire i passi di build e la gestione delle dipendenze delle mie app Android ... è stato un po 'più difficile da configurare inizialmente, ma funziona alla grande ora che ho tutto da configurare. –

1

può essere il modo migliore è quello di utilizzare ora Studio Android + Gradle. Questo caso consente di creare versioni sia a pagamento che gratuite con un solo comando in console. Ulteriori dettagli sono in questo post: https://stackoverflow.com/a/17286142/1705370

+0

Come qualcuno che ha fatto questo, l'integrazione di Gradle in Android Studio (specialmente la versione per Mac OS!) È friabile, inaffidabile e FAR, FAR, FAR dalla qualità Beta. Non usarlo ancora. Ci arriverà ma non è ancora lì. – Delyan

+0

Sì, ci sono ancora molti bug, ma è possibile utilizzarlo in produzione. – galex

+0

Ad esempio, Android Studio viene utilizzato con successo in produzione con il nostro prodotto [Glextor AppManager] (http://glextor.com/products/appmanager/). Il prodotto è ordinato come versioni a pagamento, gratuite e in alcuni partner in un solo passaggio con Gradle. Ma dovevamo usare il template del manifest e alcuni file java per questo. – galex

Problemi correlati