Все ключи для конкретной среды, такие как URL-адрес сервера и ключи SDK, в настоящее время хранятся в файле build.gradle. Цель этого - легко переключаться между средой разработки и производством с помощью buildTypes.
Я добавил в приложение Google Analytics, который настраивается через файл res/xml/app_tracker.xml, содержащий идентификатор трекера:
<string name = "ga_trackingId" translatable = "false">UA-12345678-9</string>
Как можно переместить идентификатор трекера в build.gradle файла buildTypes, чтобы определить другой идентификатор трекера GA для каждой среды?
Я пробовал это в build.gradle:
buildTypes {
release {
resValue "string", "GOOGLE_ANALYTICS_TRACKER_ID", "UA-12345678-9"
}
}
Что автоматически создает файл xml:
<?xml version = "1.0" encoding = "utf-8"?>
<resources>
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: debug -->
<string name = "GOOGLE_ANALYTICS_TRACKER_ID" translatable = "false">UA-12345678-9</string>
</resources>
Но в файле app_tracker.xml это не работает:
<string name = "ga_trackingId" translatable = "false">@string/GOOGLE_ANALYTICS_TRACKER_ID</string>
Я попробовал решение из вашего связанного ответа, но оно не сработало, поэтому я разместил этот вопрос, см. Мое редактирование.
Исходя из заданного вами вопроса, вы хотите поддерживать несколько идентификаторов трекера для другой среды.
Поэтому вместо поддержки UA-XXX в build.gradle нам нужно указать несколько файлов xml с разными UA-XXX в классе Application.
private static final String PROPERTY_ID = "UA-XXXXX-Y";
public enum TrackerName {
PROD_ENV_TRACKER, // Tracker used for Production Environment.
DEV_ENV_TRACKER, // Tracker used for Devlopment Environment.
STAGE_ENV_TRACKER, // Tracker used for Stage Environment.
}
HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
public AnalyticsSampleApp() {
super();
}
synchronized Tracker getTracker(TrackerName trackerId) {
if (!mTrackers.containsKey(trackerId)) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
Tracker t = (trackerId == TrackerName.PROD_ENV_TRACKER) ? analytics.newTracker(PROPERTY_ID)
: (trackerId == TrackerName.DEV_ENV_TRACKER) ? analytics.newTracker(R.xml.dev_env_tracker)
: analytics.newTracker(R.xml.stage_env_tracker);
mTrackers.put(trackerId, t);
}
return mTrackers.get(trackerId);
}
}
Возможный дубликат Как я могу получить доступ к значению BuildConfig в моем файле AndroidManifest.xml?