Подтвердить что ты не робот

Управление ключом 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]" />
-->
4b9b3361

Ответ 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-ароматы и разбить их таким образом; так же, как и для переопределения манифеста.