Управление ключом API Карт Google с помощью Gradle в Android Studio
Я знаю, что Gradle является мощным, и я хотел бы управлять ключами API для разработки/производства Google Maps.
В настоящее время мне всегда нужно вручную прокомментировать одну строку и раскомментировать другую, чтобы она работала. Есть ли способ сделать это автоматически в Gradle с помощью какой-либо пользовательской конфигурации выпуска?
<!-- MapView v2 API -->
<uses-library android:name="com.google.android.maps" />
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
<!-- PROD
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
-->
Ответы
Ответ 1
Поскольку вы используете 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, и вы устанавливаете значение на основе вашего типа сборки. Надеюсь, это поможет.
Ответ 2
Вы можете добиться этого с помощью функции замещения ярлыка: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
в файле build.gradle:
buildTypes {
debug {
manifestPlaceholders = [ google_map_key:"your_dev_key"]
}
release {
manifestPlaceholders = [ google_map_key:"prod_key"]
}
}
а затем в манифесте:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="${google_map_key}"/>
Точная вещь для разных ключей для разных вкусов, и это более чистое решение, чем использование строковых ресурсов.
Ответ 3
В Android Studio (проверено с версией 0.8.11) вы можете добавить в свой проект активность Google Maps (New- > Google- > Google Maps), а студия Android создаст для вас необходимые файлы, вам нужно будет только добавить ключи. Также есть инструкции. Найдите файлы google_maps_api.xml в папках debug/res/values /и release/res/values.
Ответ 4
В Android Studio есть концепция типов сборки и вкусов, и вы можете использовать их, чтобы получить то, что вам нужно. Типы сборки - это разные версии приложения, которые функционально идентичны, но могут отличаться от кода отладки. По умолчанию для всех проектов Android Gradle существуют типы отладки и выпуска.
Ароматизаторы - это версии вашего приложения, которые функционально отличаются; например, у вас могут быть бесплатные и оплаченные. По умолчанию в ваших проектах Android Gradle нет никаких вариантов, но вы можете их добавить.
Типы сборки и вкусы объединяются (в том, что называется вариантом), когда вы выполняете сборку; в этом примере вы можете иметь freeDebug, freeRelease, paidDebug и paidRelease.
Система сборки позволяет легко переопределить некоторые вещи в каждом типе/вкусе/варианте; одна из вещей, которую вы можете сделать, - это переопределить части файла AndroidManifest.xml. Система сборки объединяет различные допустимые бит манифеста в один манифест мастера, когда он создает конкретный вариант.
С учетом этого в вашем случае вы можете захотеть иметь другой ключ API в отладочной версии вашего приложения по сравнению с версией выпуска. Отладочная версия - это то, что вы будете использовать в своей повседневной разработке, отладке и тестировании, а версия выпуска - это то, что вы развернете для пользователей.
Чтобы сделать это, не поместите ключ API Карт Google в основной файл AndroidManifest.xml приложения в src/main
; вместо этого добавьте две новые папки, src/debug
и src/release
, и добавьте туда stub файлы AndroidManifest.xml. Не включайте полную информацию в эти новые манифесты, а только то, что уникально в том, что необходимо для этого конкретного варианта. Ваши исходные файлы будут выглядеть так:
![Screenshot of project directory structure showing multiple manifest files]()
Ваш файл src/debug/AndroidManifest.xml
будет содержать следующее:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
</manifest>
и src/release/AndroidManifest.xml
будет иметь следующее значение:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
</manifest>
Чтобы повторить, не кладите ключ API в файл src/main/AndroidManifest.xml
.
Если по какой-то причине вы не хотите использовать типы построения для дифференциации, вы можете настроить dev и prod-ароматы и разбить их таким образом; так же, как и для переопределения манифеста.