web-dev-qa-db-fra.com

Gérer la clé API Google Maps avec Gradle dans Android Studio

Je sais que Gradle est puissant et je voudrais gérer les clés API pour le développement/la production de Google Maps

Actuellement, j'ai toujours besoin de commenter manuellement une ligne et de décommenter l'autre pour la faire fonctionner. Existe-t-il un moyen de le faire automatiquement dans Gradle avec une configuration de version personnalisée?

<!-- 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]" />
-->
49
Hrk

Puisque vous utilisez gradle, vous pouvez effectuer les opérations suivantes:

build.gradle

Android {
  .. .. ...
    buildTypes {
       debug {
          resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
       }
       release {
           resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
       }
    }
  }

Et dans votre AndroidManifest.xml

<meta-data
            Android:name="com.google.Android.maps.v2.API_KEY"
            Android:value="@string/google_maps_api_key"/>

De cette façon, vous n'avez qu'un seul fichier AndroidManifest.xml et vous définissez une valeur en fonction de votre type de build. J'espère que cela t'aides.

106
bond

Vous pouvez y parvenir avec la fonction d'espace réservé manifeste: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

dans le fichier build.gradle:

buildTypes {
    debug {
        manifestPlaceholders = [ google_map_key:"your_dev_key"]
    }
    release {
        manifestPlaceholders = [ google_map_key:"prod_key"]
    }
}

puis en manifeste:

<meta-data
    Android:name="com.google.Android.maps.v2.API_KEY"
    Android:value="${google_map_key}"/>

C'est la chose exacte pour différentes clés pour différentes saveurs et c'est une solution plus propre que d'utiliser des ressources de chaîne.

24
IlyaEremin

Dans Android Studio (vérifié avec la version 0.8.11), vous pouvez ajouter Google Maps Activity (Nouveau-> Google-> Google Maps Activity) à votre projet et Android = studio va générer les fichiers nécessaires pour vous, il vous suffit d'insérer vos clés. Des instructions sont également générées. Recherchez les fichiers google_maps_api.xml dans vos dossiers debug/res/values ​​/ et release/res/values.

13
Okas

Dans Android Studio, il y a le concept des types de construction et des saveurs, et vous pouvez les utiliser pour obtenir ce dont vous avez besoin. Les types de construction sont différentes versions de l'application qui sont fonctionnellement identiques mais peuvent différer dans le débogage Par défaut, tous les projets Android Gradle ont des types de build de débogage et de publication.

Les saveurs sont des versions de votre application qui sont fonctionnellement différentes; vous pouvez avoir gratuitement et payant, par exemple. Par défaut, vos projets Android Gradle n'ont pas de saveurs, mais vous pouvez les ajouter.

Les types de construction et les saveurs sont combinés (dans ce qu'on appelle un une variante) lorsque vous effectuez une construction; dans cet exemple, vous pouvez avoir des builds freeDebug, freeRelease, paidDebug et paidRelease.

Le système de construction vous permet de remplacer facilement un certain nombre de choses dans chaque type/saveur/variante; vous pouvez notamment remplacer les parties du fichier AndroidManifest.xml. Le système de construction fusionne les différents bits éligibles des manifestes en un seul manifeste maître lorsqu'il crée une variante particulière.

Avec cet arrière-plan en main, dans votre cas, vous souhaiterez peut-être avoir une clé API différente dans la version de débogage de votre application par rapport à la version finale. La version de débogage est ce que vous utiliserez dans votre développement, débogage et test au jour le jour, et la version finale est celle que vous déploierez pour les utilisateurs.

Pour faire ça, ne pas placez la clé API Google Maps dans le fichier AndroidManifest.xml de l'application principale dans src/main; au lieu de cela, ajoutez deux nouveaux dossiers, src/debug et src/release et ajouter talon Fichiers AndroidManifest.xml là-bas. N'incluez pas d'informations complètes dans ces nouveaux manifestes, mais uniquement ce qui est unique concernant ce qui est nécessaire pour cette variante particulière. Vos fichiers source ressembleront à ceci:

Screenshot of project directory structure showing multiple manifest files

Votre src/debug/AndroidManifest.xml le fichier contiendra ceci:

<?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>

et src/release/AndroidManifest.xml aura ceci:

<?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>

Pour réitérer, ne mettez aucune clé API dans le src/main/AndroidManifest.xml fichier.

Si, pour une raison quelconque, vous ne voulez pas utiliser de types de construction pour vous différencier, vous pouvez configurer des saveurs de développement et de production et les diviser de cette façon à la place; le manifeste prioritaire fonctionne de la même manière.

11
Scott Barta