Сохранение ключа 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. После создания проекта вы можете ссылаться на эти константы внутри исходного кода.