web-dev-qa-db-fra.com

Android: Google Map v2 ne montrant pas la carte pour la version apk

Mon application Google Map fonctionne correctement sur le périphérique avec la clé de débogage Google Map API KEY, mais lorsque je crée un apk signé pour mon application avec la version Google Map API KEY, elle n'affiche pas la carte . Pour générer le mode de publication Google API KEY, j'utilise Empreinte SHA1 avec mon magasin de clés . Et je définis également les "types de signature et de génération" dans les paramètres de mon projet, comme expliqué par developer.Android.com ( http://developer.Android.com/tools/publishing/app -signing.html ).

Essayé toutes les solutions possibles (supprimer apk et ensuite le réinstaller, redémarrer l'appareil, nettoyer le projet). rien n'a fonctionné. Quiconque a une bonne solution à mon problème s'il vous plaît aider. FYI Utilisation de la plate-forme de studios Android.

16
sam2395

Peut-être avez-vous deux fichiers google_maps_api.xml, l'un dans le dossier app/src/debug/res/values ​​et l'autre dans le dossier app/src/release/res/values, mais seul le fichier de débogage contient votre clé API.

23
Arslan

La clé d'API doit être codée en dur dans le manifeste Android et ne fonctionne pas si elle se trouve dans un fichier XML de ressources séparé. 

14
Florence Herrou

Le certificat de débogage est différent de votre certificat de production. Vous devez ajouter les deux à votre entrée de clé Google Maps dans votre console d'API en tant que ligne séparée - chacune avec le même ID de package, mais naturellement un hachage SHA1 différent.

MODIFIER

Il n'y a aucune limite quant au nombre d'empreintes de certificat et de noms de package attribués à une seule clé Google Maps. Par conséquent, à moins que vous n'ayez besoin de cet élément séparé, il est parfaitement correct de disposer de versions de développement et de production utilisant la même clé. Dans la console Google, cela ressemblerait à ceci (un sha1 provient du cert. De débogage, qui est identique pour toutes les applications que vous créez avec cet IDE, l'autre est un cert de production):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar

ou même (mais je ne recommande pas d'utiliser la même clé pour différentes applications):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp
6
Marcin Orlowski

J'ai eu ce problème et en exécutant ces étapes, je pense que cette façon est parfaite et complète

Pour Android Studio:

  1. Construire-générer signé APK
  2. Copier le chemin du magasin de clés.
  3. Ouvrez maintenant une invite de commande et accédez à C:\Program Files\Java\jdk1.6.0_39\bin> (ou à n’importe quelle version de jdk installée).
  4. Tapez keytool -list -v -keystore puis collez votre chemin d'accès au magasin de clés (par exemple, C:\Program Files\Java\jdk1.6.0_39\bin> keytool -list -v -keystore "E:\Mes projets\Android\android studio\signé apks\Hello World\HelloWorld.jks ").
  5. Maintenant, il va demander le mot de passe du magasin de clés, fournir le vôtre et appuyer sur Entrée pour obtenir les clés de vos certificats SHA1 et MD5.
  6. Vous pouvez voir SHA1 pour votre certificat de débogage et son utilisation dans la console pour développeur Google
3
JJorian

Il y a deux choses à retenir et pour que cela fonctionne. 

  1. Variante de construction de débogage

    • Générer une nouvelle clé de débogage Android à l'aide de l'outil de clé
    • Associez cette clé (SHA-1) à la clé API de carte Android sur la console Google. 
    • Le mode débogage comporte un fichier google_maps_api.xml dans lequel la clé de l’API de cartes Android est stockée (src/debug /.../ google_maps_api.xml) sous la forme d’une chaîne "google_maps_key".
  2. Libérer la variante de construction

    • Générer une nouvelle clé de version Android à l'aide de l'outil de clé
    • Associez cette clé (SHA-1) à une nouvelle clé d’API de carte Android sur la console Google.
    • Le mode de publication comporte un fichier google_maps_api.xml dans lequel la clé de l’API pour les cartes Android est stockée (src/version /.../ google_maps_api.xml) sous la forme d’une chaîne "google_maps_key".

Dans le fichier AndroidManifest.xml, ajoutez la ligne suivante:

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/google_maps_key" />

Suivez la procédure normale pour le débogage et la libération. Cela devrait fonctionner de manière transparente.

2
Anil Muppalla

Désolé pour répondre en retard. J'espère que cela aidera pour les années à venir . J'utilise cette solution pour résoudre le même problème Lorsque nous utilisons Google Maps en cours de développement, un fichier debug.keystore par défaut est utilisé sans mot de passe. Lorsque nous construisons un fichier apk à télécharger sur Play Store, une nouvelle clé SHA-1 est créée. Nous devons donc créer un nouveau fichier debug.keystore pour cela. Nous devons créer une nouvelle clé API pour ce SHA-1 . Selon la solution Comment obtenir une empreinte de certificat de signature (SHA1) pour OAuth 2.0 sur Android? nous pouvons obtenir SHA-1 pour le fichier apk exporté.

Après cela, utilisez la nouvelle clé d'API dans Android Manifest comme précédente et vous avez terminé.

EDIT 1-
Étapes pour le faire
1) Créez un fichier apk en utilisant "Utiliser l'assistant d'exportation" dans le fichier "Manifeste Android" de votre projet.
2) Après avoir inséré la clé et avant la fin, les clés MD5 et SHA1 apparaissent comme indiqué, est-ce que cette image est donnée- ( http://i.stack.imgur.com/SldEv.png )
3) Créez une nouvelle clé d’API pour le projet Android dans https://console.developers.google.com pour le nouveau SHA1 qui est récupéré au point 2).
4) Utilisez cette clé API dans le fichier manifeste comme indiqué ci-dessous

5) Nettoyez votre projet et créez à nouveau le fichier APK conformément au point 1).
6) Vous pouvez voir Google Maps maintenant dans cet apk.

2
Kunal

vous ne pouvez pas utiliser la même clé que vous avez utilisée dans le débogage dans la version, ils ont des œuvres différentes. Pour résoudre ce problème, vous devez générer une nouvelle clé Google Map Key API KEY à partir du magasin de clés que vous utilisez dans votre version Voir cette vidéo pour plus de détails https://www.youtube .com/regarder? v = xLJ0jDFdUZ0

1
Hussein Talib

Dans la console Google Api, où nous avons créé la clé API, nous avons la possibilité d'ajouter plusieurs empreintes digitales à la même clé. Ce que j'ai fait a été d'ajouter deux empreintes digitales SHA1 pour mon magasin de clés de débogage et mon magasin de clés de version et la même clé d'API a fonctionné pour moi.

Notez que ci-dessous concerne Ubuntu en particulier:

  1. Obtenez SHA1 pour le débogage en utilisant la commande ci-dessous

    keytool -list -v -keystore ~/.Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
    
  2. Pour obtenir SHA1 pour publication, la commande devient

    keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
    

où 

/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks est le chemin où se trouve mon fichier de clés pour l'apk signé

test est le nom d'alias de clé utilisé lors de la génération du magasin de clés signé

et password est le mot de passe utilisé lors de la signature de l'apk

J'espère que cela t'aides. Bonne codage :)

1
Atul O Holic

Comment puis-je obtenir l'empreinte digitale api SHA1 de publication:

installez votre APK signé à partir de Playstore ou copiez-le simplement sur le téléphone. 

Branchez le câble USB s'il s'agit d'un vrai téléphone et ouvrez Android Studio.

La première fois que vous essayez d’obtenir des cartes, une entrée du journal indiquera quelque chose comme:

E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)

Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:

API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>

Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>

ensuite, suivez simplement ces instructions pour créer une nouvelle entrée dans la console du développeur.

  • si vous appuyez sur vos cartes d'application avant de voir le journal, vous devrez peut-être fermer l'application de la mémoire et réessayer)
  • cette procédure devrait également fonctionner sur un émulateur.
1
WilliamK

pour les futures refs --- mon cas --- il y a deux fichiers google_maps_api.xml où vous devez mettre votre clé api google. Vous pouvez très facilement faire l'erreur de remplacer YOUR_API_KEY dans un seul d'entre eux (surtout si vous venez de supprimer le google api/app et d'en créer de nouveaux)

1
DoruChidean
create another Maps API key (to put in your manifest) corresponding with you release   
keystore for release.

Consultez la documentation de Google

1
Naveen Tamrakar

Si vous avez créé le code SHA1 à partir du magasin de clés personnalisé, utilisez-le de la même manière en mode validation. ou générer apk en signant avec le même magasin de clés et le même test.

Avant cela, vous avez besoin de données d'application claires (Setting-> App-select app-Clear data-> uninstall) et essayez. cela a fonctionné pour moi. Assurez-vous que le nom du package est identique à celui de la console de développement Google. 

0
Suchith

J'ai eu un problème similaire et le problème était que j'ai généré l'apk d'Android Studio sans sélectionner au préalable la bonne saveur. Cela signifie que mon manifeste utilisait toujours la clé de l'API Google Maps que j'ai créée pour la version de débogage.

Assurez-vous de sélectionner le type de version dans votre Android Studio. Voir la capture d'écran ci-dessous:

 enter image description here

0
narko

J'ai eu un problème similaire: après avoir créé quelques nouvelles variantes construites avec le même type ("release") mais quelques nouvelles saveurs ("free" et "premium"), le fragment de Google Maps ne montrait plus les cartes et l'écran apparaissait totalement vide. Dans le logcat, je ne pouvais voir que le message d'erreur suivant "Code de réponse inattendu 400 pour https://clients4.google.com/glm/mmap/api ", ce qui était probablement le signe d'un problème d'accès à l'API Google Maps. 

Bien sûr, j’ai réexaminé l’ensemble du processus d’API de Google Cloud afin de vérifier s’il manquait quelque chose dans les informations d’identification de la clé de mon API, mais je n’ai rien trouvé d’erreur. En fait, pour les nouveaux APK, il est indiqué d'ajouter les informations de construction (nom + empreinte digitale) aux informations d'identification existantes du projet afin d'hériter de la même clé d'API qui est toujours valide. 

Les instructions que nous pouvons lire sont très claires: "Ajoutez le nom de votre package et l’empreinte digitale du certificat de signature SHA-1 afin de limiter son utilisation à vos applications Android. Obtenez le nom du package à partir de votre fichier AndroidManifest.xml. Utilisez ensuite la commande suivante pour obtenir le fichier. empreinte digitale: keytool -list -v -keystore mystore.keystore ". 

Le problème dans mon cas était que mes nouvelles variantes "noms de paquet" n'étaient pas celles qui existaient dans le nom du paquet Manifest ("com.example.nom_application.release"). En fait, en raison de mes nouveaux goûts, je portais le même nom de manifeste MAIS deux nouveaux noms de paquets "réels": "com.example.nom_application.free.release" et "com.example.nom_application.premium.release". Ces noms n'apparaissent pas écrits dans le fichier manifeste comme tels, car ils correspondent à la configuration de Gradle où les variantes sont définies (dans mon cas, avec l'attribut "applicationIdSuffix"). Ceci est assez déroutant pour moi car Gradle "application id" ne doit pas chevaucher le "nom de package" du manifeste. Mais lorsque nous lisons attentivement toute la documentation Android, nous pouvons lire "si le nom du paquet manifeste est différent de Gradle applicationId, build copiera l'ID de l'application dans le fichier manifeste final". Bien entendu, les deux variantes ont la même empreinte digitale, car elles sont toujours du même type de construction ("release").

La solution consistait donc à ajouter dans le même identifiant de projet les deux nouvelles entrées de variante pour hériter de la même clé API:

  • entrée d'origine (vous n'avez pas besoin de le supprimer): nom du package = "com.example.nom_application.release" - empreinte digitale du certificat SHA-1 = "xxxxx"

  • nouvelle entrée 1: nom du package = "com.example.nom_application.free.release" - empreinte de certificat SHA-1 = "xxxxx" sans changement, identique à celui utilisé jusqu'à présent.

  • nouvelle entrée 2: nom du package = "com.example.nom_app.premium.release" - empreinte de certificat SHA-1 = "xxxxx" sans changement, comme auparavant.

Enfin, il peut s'avérer nécessaire de nettoyer votre construction pour vous assurer que vous surveillez réellement le comportement mis à jour correct dans votre fragment ou activité de carte. 

En ce qui concerne le reste des recommandations, dans mon cas, je n'ai pas eu à les appliquer: - pas besoin de coder en dur la clé d'API dans le manifeste - pas besoin de créer une nouvelle clé d'API pour les nouvelles variantes APK's - pas besoin d'utiliser les fichiers google_maps_api.xml

0
Javi