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{}
?
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.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.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/
Cela vous épargnera des efforts pour ajouter et supprimer API_KEY tout en validant du code dans Github.