2013-12-13 12 views
10

Il mio manifest Android utilizza valori diversi durante il debug e al momento del rilascio.Riga XML separata per la modalità di debug o release nel manifest Android

Qual è il modo più semplice per differenziare un valore per ogni tipo di build?

Quando debug:

<meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="my-lovely-debug-api-key" /> 

Quando rilascio:

<meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="my-lovely-release-api-key" /> 

tia.

+1

quanto sistema di compilazione stai usando? (maven, ant, gradle ...) – Fredszaq

+2

qualsiasi utilizzo di eclissi :) – ericosg

risposta

1

Si noti che se si utilizzano build predefinite di Eclipse, probabilmente utilizza un modulo "Ant" appositamente configurato all'interno di eclipse. Puoi controllare il grado di coordinazione Eclipse/Ant selezionando la sezione "Finestra/Preferenze/Ant" in eclipse/Prefs ...

Una soluzione è rendere più esplicito, la collaborazione di Eclipse/Ant in modo che un Il file 'build.xml' è parte del tuo progetto (file di costruzione a livello di progetto piuttosto che il file predefinito copiato al momento della compilazione dalla cartella $ SDK/ROOT).

vedere here e leggere i commenti in fondo here per avere un'idea migliore di come viene utilizzato un file 'build.xml' a livello di progetto.

Una volta digerito questo, la soluzione qui di seguito avrà più senso ...

--Solution--

Modificare il rilascio e le sezioni di debug di voi 'build.xml' file come segue:

<!-- **************** Debug specific targets *************** --> 
    ... 
    <target name="-set-debug-mode" depends="-setup"> 
    ... 

     <!-- API modify belo for build-typ --> 
     <copy file="config/strings.xml" todir="res/values"> 
     <filterset> 
    <filter token="CONFIG.API" value="${config.db.api}"/> 
    <filter token="CONFIG.REST" value="${config.db.rest}"/> 
    </filterset> 
    </copy> 
    ... 



    <!-- *************** Release specific targets ************** --> 
    ... 
    <target name="-set-release-mode" depends="-set-mode-check"> 
    ... 
    <!-- API modify belo for build-typ --> 
    <copy file="config/strings.xml" todir="res/values"> 
    <filterset> 
    <filter token="CONFIG.API" value="${config.db.api.prod}"/> 
    <filter token="CONFIG.REST" value="${config.db.rest.prod}"/> 
    </filterset> 
    </copy> 

e nel file 'ant.properties' nella cartella principale, mettere i valori delle proprietà per le chiavi API e quant'altro ...

# API condition builds dev|prod in DB @parse.com 
config.db.api=some_key_val 
config.db.rest=some_k2_val 
config.db.api.prod=some_k3_val 
config.db.rest.prod=some_k4_val 

e legarlo insieme in un XML risorsa che è l'obiettivo della 'copia' comanda nella build ...

'config/strings.xml' 

<string name="default_value_parse_key_appId">@[email protected]</string> 
<string name="default_value_parse_key_rest">@[email protected]</string> 
+1

sembra migliore della mia soluzione corrente che è il codice che esegue il pre-build per scambiare i valori. Grazie – ericosg

Problemi correlati