Android: автоматически выбирает debug/release Maps v2 api key?
Я использую API Google Maps v2 в своем проекте. В Google Maps v2 ключ API отладки/выпуска определен в AndroidManifest.xml
. Я видел ссылку, но в этом ключе карты определяется в файле макета xml не в AndroidManifest.xml
. Могу ли я определить ключи отладки и выпуска для моего проекта в AndroidManifest.xml
?
Мне нужно что-то подобное в AndroidManifest.xml
:
Если режим отладки:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/debug_map_api_key"/>
Если режим выпуска:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/release_map_api_key"/>
Ответы
Ответ 1
Я решил эту проблему, используя следующие шаги:
В консоли API разработчика Google
- Нажмите Create New Android key...
- В cmd.exe/Terminal:
keytool -list -v -keystore mystore.keystore
- Пароль:
android
- Теперь введите
SHA1 key;package name
для отладки и нажмите enter
- Введите
SHA1 key;package name
для выпуска
- Нажмите Create
Теперь используйте этот ключ API вашего проекта
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/common_map_api_key"/>
Ответ 2
Один из лучших способов использования файла build.gradle в последних версиях Android 5.0 и Android 6.0 (API 20, 21,22,23)
Ну, вы можете использовать их просто, не создавая вкусов продукта в gradle
. Это еще один пример, который мы можем достичь с помощью gradle
. Вы можете достичь этого двумя простыми шагами.
- Добавить пользовательское значение в файл
manifestplaceholders
build.gradle.
См. ниже
buildTypes {
debug {
manifestPlaceholders = [ mapApiKeyValue:"GHjaSyAjlyp3O831lgaonHMXsd-_DpQ3002x3S4"]
}
release {
manifestPlaceholders = [ mapApiKeyValue:"AIzaSyAuMGDLr2HeuRed4JA0CrdYYdZRjeC3EA"]
}
}
- Отредактируйте файл манифеста, как показано ниже.
часть моего файла манифеста
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="${mapApiKeyValue}" />
Это решение работает для последних Android 5.0 и Android 6.0 (API 20, 21,22,23)
Ответ 3
Для организаций, которым необходимо поддерживать отдельные ключи, вы можете поместить их в отдельные каталоги в Android Studio. Убедитесь, что подкаталог src
, который вы используете, соответствует вкусу или buildType
От Построение проекта с помощью Gradle:
To build each version of your app, the build system combines source code and resources from:
src/main/ - the main source directory (common to all variants)
src/<buildType>/ - the build type source directory
src/<flavorName>/ - the flavor source directory
В projectroot/yourapp/build.gradle
:
buildTypes {
debug {
runProguard false
debuggable true
}
release {
runProguard true
debuggable false
...
}
В projectroot/yourapp/src/main/AndroidManifest.xml
:
...
<application
android:name=".MyApplication"
android:theme="@style/Theme">
<!-- Don't put your key here -->
...
В projectroot/yourapp/src/debug/AndroidManifest.xml
, полностью квалифицируйте имя приложения.
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:name="com.hipmunk.android.HipmunkApplication">
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="yourdebugkey" />
</application>
</manifest>
В projectroot/yourapp/src/release/AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:name="com.hipmunk.android.HipmunkApplication">
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="release key" />
</application>
</manifest>
Ответ 4
Поскольку вы используете gradle, вы можете сделать следующее:
build.gradle
android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}
И в вашем AndroidManifest.xml
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_api_key"/>
Таким образом, у вас есть только один AndroidManifest.xml, и вы устанавливаете значение на основе вашего типа сборки. Надеюсь, это поможет.