2016-03-01 13 views
15

Sono nuovo di Android e lavorare su un progetto in cui vedo che la chiave API che ho ottenuto viene salvato in gradle.properties come:Salvare l'API Key in gradle.properties

MyOpenWeatherMapApiKey="1c3ae96f93a0094e8a7chsjdgfid04aed3f10"

E poi nel build.gradle(module:app) sto aggiungendo le seguenti righe:

buildTypes.each { 
      it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey 
     } 

Così, nel mio programma principale che sono l'accesso ai dati utilizzando questa API il cui URL è ottenuto da questo pezzo di codice:

Quindi, la mia domanda è quella del perché prendere tutta la tensione di fare modifiche per memorizzare l'appid nella parte gradle. Non possiamo accedere direttamente solo al programma principale?

E la seconda parte della mia domanda è cosa sta effettivamente accadendo nella parte gradle, specialmente con il blocco buildTypes.each{}?

+1

Grazie. La tua domanda mi ha aiutato a configurare il mio progetto. –

risposta

19
  1. L'idea di questo riferimento indiretto è quello di permettere di memorizzare chiave API in file che non vengono caricati il ​​controllo di versione: gradle.properties è un file locale e non devono essere conservati sotto il controllo di versione, e BuildConfig è un generato classe, quindi verrà creato solo al momento della compilazione. È sicuramente più semplice archiviare la chiave API da qualche parte come una stringa semplice, ma poi dovrai impegnarla sul repository.
  2. Durante il periodo di compilazione, Gradle genera il file BuildConfig per memorizzare alcune costanti relative alla build. È possibile utilizzare il comando buildConfigField per ordinare a Gradle di aggiungere campi personalizzati in BuildConfig. Dopo aver creato il progetto, puoi fare riferimento a queste costanti all'interno del codice sorgente.
+0

come posso usarlo nel file manifest.xml per altre chiavi API? –