2012-12-20 14 views
20

Attualmente sto lavorando su un progetto Android e sto imparando a usare git. che sto bloccato a causa di un problema con git: Io ho la mia chiave API di Google Maps dichiarato nel mio file Android-manifesto:Modificare un AndroidManifest durante la compilazione per rimuovere la chiave API

<meta-data 
    android:name="com.google.android.maps.v2.API_KEY" 
    android:value="HEREISMYKEY"/> 

Ora, vorrei spingere il mio codice in GitHub, ma posso spingere il mio AndroidManifest, perché contiene la mia chiave API (che dovrebbe rimanere segreta).

Mi piacerebbe sapere se c'è un modo per modificarlo prima di ogni push, o magari modificarlo ogni volta che compilo la mia applicazione?

Grazie per il vostro aiuto!

risposta

31

Creare un nuovo file * .xml nei propri res/valori (chiamarlo api-keys.xml o qualcosa di simile).

Cambia il tuo manifesto per puntare a questa stringa:

<meta-data 
    android:name="com.google.android.maps.v2.API_KEY" 
    android:value="@string/GoogleMapsKey"/> 

Quando si preme prima le modifiche al pubblico, messo in una chiave fittizia.

Quindi modificare il file con la vera chiave API.

Quindi aggiungere il file al file .gitignore in modo che non venga nuovamente premuto.

+3

Si dovrebbe anche decomprimere il file api-keys.xml prima di creare il file gitignore. Altrimenti continuerai a spingere le modifiche. [link] (https://help.github.com/articles/ignoring-files) – piratemurray

+0

Solo una piccola FYI, per qualche ragione, IntelliJIdea non vuole api-keys.xml quindi usa api_keys.xml invece. – Rupert

+0

Questa è un'ottima risposta. Per qualche motivo ho pensato che tutti i file xml delle risorse stringa dovessero essere denominati valori per convenzione. Ora ho imparato che posso fare la stessa cosa su Android come faccio per i miei altri progetti! –

1

Bene, quello che potresti fare è mettere il tuo file AndroidManifest.XML nel tuo file .gitignore e in questo modo non verrà spinto verso l'alto con il resto del codice .. Quindi basta premere un file readme o qualcosa che ha una fonte generalizzata AndroidManifest.xml che chiunque dovrebbe copiare e incollare in un file AndroidManifest.xml per creare la propria applicazione. In questo modo puoi apportare modifiche alla tua app, crearla secondo le tue necessità e poi non occuparti di generalizzarla su ogni build e spingere nel controllo del codice sorgente.

0

Il modo in cui ho affrontato problemi simili in passato è l'utilizzo di specifici rami nel mio repository git per push pubblicitari.

Supponiamo di avere un ramo master locale con le chiavi nel manifest. Quando sei pronto a spingere su github (o altrove) puoi creare un nuovo ramo "release" senza cronologia. Potete vederne un po 'di più qui: How to push new branch without historygit branch --orphan release. Una volta che hai rimosso tutte le informazioni private, commetti tutti i file e invia solo quel ramo a github git push origin release.

Il problema con questo è che non si avrà una cronologia di commit, forse qualcun altro può inventarsi qualcosa di meglio.

Problemi correlati