web-dev-qa-db-fra.com

Enregistrement de la clé d'API dans gradle.properties

Je suis nouveau sur Android et travaille sur un projet dans lequel je vois que la clé d'API que j'ai obtenue est enregistrée dans gradle.properties en tant que:

MyOpenWeatherMapApiKey="1c3ae96f93a0094e8a7chsjdgfid04aed3f10"

Et puis, dans build.gradle(module:app), j'ajoute les lignes suivantes: 

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

Donc, dans mon programme principal, j'accède aux données en utilisant cette API dont l'URL est obtenue par ce code:

final String FORECAST_BASE_URL = "http://api.openweathermap.org/data/2.5/forecast/daily?";
            final String QUERY_PARAM = "q";
            final String FORMAT_PARAM = "mode";
            final String UNITS_PARAM = "units";
            final String DAYS_PARAM = "cnt";
            final String APPID_PARAM = "APPID";
            Uri builtUri = Uri.parse(FORECAST_BASE_URL).buildUpon()
                    .appendQueryParameter(QUERY_PARAM, params[0])
                    .appendQueryParameter(FORMAT_PARAM, format)
                    .appendQueryParameter(UNITS_PARAM, units)
                    .appendQueryParameter(DAYS_PARAM, Integer.toString(numDays))
                    .appendQueryParameter(APPID_PARAM, BuildConfig.OPEN_WEATHER_MAP_API_KEY)
                    .build();
            URL url = new URL(builtUri.toString());

Donc, ma question est la suivante: pourquoi prendre toute la tension liée aux modifications pour stocker l’appid dans la partie graduée. Ne pouvons-nous pas accéder directement au programme principal uniquement?

Et la deuxième partie de ma question est ce qui se passe réellement dans la partie gradle, en particulier avec le bloc buildTypes.each{}?

16
arqam
  1. L’idée de cette indirection est de vous permettre de stocker la clé d’API dans des fichiers non chargés dans le contrôle de version: gradle.properties est un fichier local et ne doit pas être stocké sous le contrôle de version, et BuildConfig est une classe générée. être créé au moment de la construction. Il est certainement plus facile de stocker la clé d'API quelque part sous forme de chaîne simple, mais vous devrez alors la valider dans le référentiel.
  2. Pendant la phase de génération, Gradle générera le fichier BuildConfig pour stocker certaines constantes liées à la construction. Vous pouvez utiliser la commande buildConfigField pour indiquer à Gradle d'ajouter des champs personnalisés dans BuildConfig. Une fois le projet construit, vous pouvez référencer ces constantes dans votre code source.
20
Egor

Reportez-vous à la section - Implémentation complète pour le stockage de API_KEY dans les propriétés de gradle afin d'éviter le téléchargement sur Github.

https://richardroseblog.wordpress.com/2016/05/29/hiding-secret-api-keys-from-git/


  1. Ajoutez /gradle.properties dans le fichier gitignore.
  2. Ajouter une ligne dans le fichier Gradle.properties "API_KEY =" CopyYourAPI_KEYhere ""
  3. Ajouter sous la ligne dans l'application: build.gradle BuildConfigField ("String", "API_KEY", API_KEY)
  4. Utilisez la clé à l'aide de l'instruction suivante "BuildConfig.API_KEY" Copiez-la partout où vous en avez besoin API_KEY

Cela vous épargnera des efforts pour ajouter et supprimer API_KEY tout en validant du code dans Github.

1
gauravsngarg