Сохранение ключа API в gradle.properties
Я новичок в android и работаю над проектом, где вижу, что ключ API, который я получил, сохраняется в gradle.properties
как:
MyOpenWeatherMapApiKey="1c3ae96f93a0094e8a7chsjdgfid04aed3f10"
И затем в build.gradle(module:app)
добавляю следующие строки:
buildTypes.each {
it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey
}
Итак, в моей основной программе я получаю доступ к данным, используя этот api, URL которого получен по этому фрагменту кода:
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());
Итак, мой вопрос заключается в том, почему все усилия, связанные с внесением изменений, сохраняются в части gradle. Не можем ли мы получить доступ непосредственно в основной программе?
И вторая часть моего вопроса - это то, что на самом деле происходит в части gradle, особенно с блоком buildTypes.each{}
?
Ответы
Ответ 1
- Идея этого направления состоит в том, чтобы позволить вам хранить ключ API в файлах, которые не загружаются в элемент управления версиями:
gradle.properties
является локальным файлом и не должен храниться под контролем версии, а BuildConfig
- это сгенерированный класс, поэтому он будет создан только во время сборки. Определенно проще хранить ключ API где-то в виде простой строки, но тогда вам придется передать его в репо.
- Во время сборки Gradle генерирует файл
BuildConfig
для хранения некоторых связанных с построением констант. Вы можете использовать команду buildConfigField
, чтобы указать Gradle добавить пользовательские поля в BuildConfig
. После создания проекта вы можете ссылаться на эти константы внутри исходного кода.