web-dev-qa-db-fra.com

Android: choisissez automatiquement la clé api de débogage / libération de Maps v2?

J'utilise l'API Google Maps v2 dans mon projet. Dans Google Maps v2, la clé de l'API de débogage/libération est définie dans AndroidManifest.xml. J'ai vu le lien mais dans cette clé de carte est définie dans un fichier de mise en page xml pas dans AndroidManifest.xml. Puis-je définir les clés de débogage et de libération pour mon projet dans AndroidManifest.xml?

Je veux quelque chose comme ça dans AndroidManifest.xml:

Si mode débogage:

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

Si mode de libération:

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

J'ai résolu ce problème en utilisant ces étapes:

Dans la console API des développeurs Google

  1. Cliquer sur Create New Android key...
  2. Dans cmd.exe/Terminal: keytool -list -v -keystore mystore.keystore
  3. Mot de passe: Android
  4. Entrez maintenant SHA1 key;package name pour déboguer et appuyer sur entrée
  5. Entrer SHA1 key;package name pour publication
  6. Cliquer sur Create

Utilisez maintenant cette clé API pour votre projet

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

L'une des meilleures façons d'utiliser le fichier build.gradle dans la dernière Android 5.0 et Android 6.0 (API 20, 21,22,23)

Eh bien, vous pouvez les utiliser simplement sans créer de saveurs de produit dans gradle. Ceci est un autre exemple que nous pouvons obtenir via Gradle. Vous pouvez y parvenir en deux étapes simples.

  • Ajoutez une valeur personnalisée au fichier manifestplaceholders build.gradle.

Voir ci-dessous

buildTypes {
    debug {
        manifestPlaceholders = [ mapApiKeyValue:"GHjaSyAjlyp3O831lgaonHMXsd-_DpQ3002x3S4"]
    }

    release {
        manifestPlaceholders = [ mapApiKeyValue:"AIzaSyAuMGDLr2HeuRed4JA0CrdYYdZRjeC3EA"]
    }
}
  • Modifiez le fichier manifeste comme ci-dessous.

une partie de mon fichier manifeste

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

Cette solution fonctionne pour les derniers Android 5.0 et Android 6.0 (API 20, 21,22,23)


Mis à jour le 5/3/2018 pour Xamarin Form et Xamarin Native Apps

Ouvert AssemblyInfo.cs in Android Projetez et ajoutez le code suivant

#if DEBUG
   [Assembly: MetaData("com.google.Android.maps.v2.API_KEY", Value = "DebugKey123123123")]
#else
   [Assembly: MetaData("com.google.Android.maps.v2.API_KEY", Value = "ReleaseKey123123123")]
#endif

Pour vérifier le fichier AndroidManifest, passez à obj/Debug/Android dossier et ouvrez le fichier manifeste et vérifiez les méta-informations,

<meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="DebugKey123123123" />
25
Zumry Mohamed

Pour les organisations qui doivent conserver des clés distinctes, vous pouvez les placer dans des répertoires distincts dans Android Studio. Assurez-vous que le sous-répertoire de src que vous utilisez correspond à une saveur ou buildType

De Construire votre projet avec 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

Dans projectroot/yourapp/build.gradle:

buildTypes {
    debug {
        runProguard false
        debuggable true

    }
    release {
        runProguard true
        debuggable false
        ...
    }

Dans projectroot/yourapp/src/main/AndroidManifest.xml:

...
<application
    Android:name=".MyApplication"
    Android:theme="@style/Theme">
<!-- Don't put your key here -->
...

Dans projectroot/yourapp/src/debug/AndroidManifest.xml, qualifiez entièrement le nom de l'application.

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

Dans 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>
15
Robert Karl

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.

7
Shirish Herwade