2015-06-10 9 views
11

Sto sviluppando un'applicazione Android che interagisce con il server tramite API REST. Ovviamente ho bisogno di utilizzare URL diversi per lo sviluppo e le versioni di rilascio. Il commento e il codice di non commento è molto noioso e errore pron.Android: gestione di URL di server diversi per lo sviluppo e il rilascio

Qual è il modo migliore per gestire questa situazione? L'utilizzo di diversi tipi di build nel file gradle è uno che potrebbe automatizzare il processo, ma non sono sicuro che questa sia la strada giusta da percorrere.

C'è anche una possibilità di aumento del numero di tipi di costruzione vale a dire. prova, interno-release ecc

+0

[Riferimento: gestione di più ambienti: sapori, tipi di build, firma di configurazioni] (http://stackoverflow.com/questions/22995057/how-do-you-manage-multiple-environments-while-developing-android-apps/39116533 # 39116533) – shijin

risposta

48

Se si utilizza Android Studio, usare buildConfigField per aggiungi campi personalizzati alla tua classe BuildConfig.

buildTypes { 
     debug { 
      buildConfigField "String", "SERVER_URL", '"http://test.this-is-so-fake.com"' 
     } 

     release { 
      buildConfigField "String", "SERVER_URL", '"http://prod.this-is-so-fake.com"' 
     } 

     mezzanine.initWith(buildTypes.release) 

     mezzanine { 
      buildConfigField "String", "SERVER_URL", '"http://stage.this-is-so-fake.com"' 
     } 
    } 

Qui, ho tre tipi di build: lo standard debug e release, più una consuetudine mezzanine uno. Ciascuno definisce un campo SERVER_URL su BuildConfig.

Quindi, nel codice Java, è sufficiente fare riferimento a BuildConfig.SERVER_URL. Quel campo avrà un valore basato sul tipo di build che hai usato per costruire quella particolare edizione dell'app.

+0

Grazie è bello. inoltre voglio dire che dopo aver aggiunto SERVER_URL devi sincronizzare gradle per aggiornare il file BuildConfig dell'app. –

+0

Una cosa di più se vogliamo usare soppalco per la stadiazione del server, allora dobbiamo usare mezzanine.initWith (buildTypes.mezzanine) invece di mezzanine.initWith (buildTypes.release) –

+0

@KhizarHayat: 'mezzanine.initWith (buildTypes. mezzanine) 'sarebbe un no-op, con' mezzanine' invariato. – CommonsWare

0

Ho avuto un problema simile e ho risolto utilizzando

if (BuildConfig.DEBUG) { } 

Sarà necessario importare

import com.commandsoftware.androidbookingapp.BuildConfig; 
+0

Buon punto, ma penso che questo non si ridurrà se ci sono più configurazioni di debug e release per esempio test. Modificherò la mia domanda per includere questo punto. – Abdullah

0

Ho avuto un problema simile con la scrittura su logcat. Volevo scrivere tutti i messaggi se l'app era stata firmata con la chiave di debug, altrimenti non scrivere quasi nessuno di essi. Ho risolto il problema con questa riga di codice:

booleano showAllMessages = ((getApplicationInfo(). Flags & ApplicationInfo.FLAG_DEBUGGABLE)! = 0);

quindi utilizzare quello booleano nel mio log writer. Dovresti essere in grado di fare qualcosa di simile quando inizializzi gli URI.

Sto usando Eclipse. Non posso dire con certezza che funzionerà in altri ambienti IDE. This answer implica che potrebbe essere un Eclipse-unico caratterizzato da

2

Può essere gestito utilizzando ProductFlavours in App build.gradle. ProductFlavours gestirà URL diversi, ad es. sviluppo e rilascio.

prega di dare un'occhiata su medium. Comprende una spiegazione dettagliata.

+1

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/15820319) –

Problemi correlati