Android: choisir automatiquement debug/release Maps api key?
OBSOLÈTE: cette vieille question se réfère à obsolètes Google Maps API v1. Lors de l'utilisation d'API v2, vous pouvez utiliser plusieurs certificat d'empreintes digitales dans un Google API Console entrée. Clé API n'est plus stocké dans le Manifeste, ni code.
Est-il possible de détecter automatiquement, le certificat a été utilisé pour la signature de l'APK? J'aimerais avoir debug et release Cartes certificats dans l'application et passer valide pour MapView constructeur.
Avec une telle configuration, je ne vais pas faire d'erreur lors de la libération de l'application que je suis en utilisant debug certificat sur émulateur et mon appareil, puis connectez-vous avec libération avant d'envoyer le app sur le Marché.
Je pensais à la détection de mon appareil particulier ou si débogueur est connecté, mais il n'est pas parfait. Peut-être que certains fichiers de marquage besoin de déboguer certificat? Est-il un meilleur moyen?
- Vous pourriez trouver la réponse fournie here convient ainsi.
- Pour la Map Api V2, de la Manière d'utiliser les touches de façon dynamique. vérifier ma réponse stackoverflow.com/a/40462174/1348522
Vous devez vous connecter pour publier un commentaire.
Il y a une nouvelle façon de déterminer est-il une version debug ou release un dans SDK Outils, de Révision 17. Un extrait de l'aperçu des nouvelles fonctions:
Alors maintenant, vous pouvez simplement écrire quelque chose comme ceci:
Mise à JOUR: j'ai rencontré un bug dans l'outil ADT: parfois
BuildConfig.DEBUG
esttrue
après l'exportation du package de l'application. La Description est ici: http://code.google.com/p/android/issues/detail?id=27940Eu le même soucis avec la clé API. Voici une solution complète, basée sur le lien ci-dessus et exemple de Bijarni (qui en quelque sorte ne fonctionne pas pour moi), j'utilise maintenant cette méthode:
Vous devez trouver votre debug signature du hashValue() une fois, juste sortie sigs[i].hashCode().
Puis, je ne voulais pas ajouter dynamiquement la MapView, mais plutôt d'utiliser le fichier xml. Vous ne pouvez pas définir la clé de l'api de l'attribut dans le code et l'utilisation de xml de mise en page, j'ai donc utiliser cette méthode simple (bien que la copie de la mise en page xml n'est pas très beau):
Dans mon MapActivity:
new MapView(this, isDebug?keyDebug:keyRelease );
et en l'ajoutant à la disposition actuelle.Moyen beaucoup plus facile de déterminer si c'est une version de débogage est par la vérification de l'indicateur de débogage de l'application info que le hachage de la signature.
Une fois debug est trouvé, vous pouvez utiliser différentes ressources pour montrer carte ou créer la mapview au sein de l'application et de l'ajouter à une mise en page.
J'ai travaillé autour de la terrible mal de l'intégration de l'api de clés dans le processus de construction et de contrôle de code source en faire une propriété stockées dans
local.properties
. J'ai dû ajouter les éléments suivants àbuild.xml
:Maintenant, bien sûr, j'ai dû créer
mapview.xml.tpl
dans mes projets racine (il ne peut pas aller àres/layout
parce que ça va casser le processus de construction):Au cours de la pré-compilation, le modèle est copié au bon endroit et @apiKey@ est remplacé par la véritable clé. Malheureusement, je n'ai pas trouvé un moyen de distinguer entre debug et release dans cette phase, afin de compiler pour la version, je viens de l'ajouter à la libération apiKey à la fourmi paramètres:
Cette approche s'intègre très bien avec SCM (je n'ai pas besoin de vérifier dans les keys) et acceptable avec le processus de construction.
Si vous êtes toujours intéressé je viens de blogué sur une autre façon de le faire. Avec un simple changement de l'Android script de compilation, vous pouvez commuter la Carte de clé API ainsi que tous les autres changements de versions. Ce que j'aime c'est que rien de débogage va dans le communiqué, et vous pouvez garder le XML dispositions juste la façon dont ils l'étaient avant.
http://blog.cuttleworks.com/2011/02/android-dev-prod-builds/
Je pense que la création d'une entrée dans l'API de Google est la console qui inclut à la fois votre relâchement de la touche et votre clé de débogage (à la fois de la cartographie pour le même package) fonctionne très bien et est un moyen beaucoup plus simple de ne pas avoir à s'inquiéter de savoir si vous êtes le débogage ou la compilation d'une version.
La solution est décrite ici
Toutes les réponses ici semblent dépassées, si vous utilisez android studio puis gradle est le chemin à parcourir
Utiliser les différentes touches dans votre construction.gradle
Et dans votre AndroidManifest.xml
source
Et si vous voulez économiser de mots de passe pour le debug et release différemment, alors vous devriez suivre cette
J'ai fini avec le dossier spécial sur carte SD - si présent, utilisez la clé de débogage; absence de déverrouillage de l'un. Et il fonctionne.
EDIT: voir accepté de répondre, il fonctionne mieux
Je ne sais pas si cela aide quelqu'un, mais j'ai fusionné quelques autres suggestions ici pour produire la suite de MapViewActivity.
Dans cet exemple, R. layout.map_dbg n'est utilisé que si c'est une version debug et que le fichier existe (ajouter ce fichier à votre .gitignore).
Les avantages de cette approche sont :
Les inconvénients de cette approche sont :
vous devez vous rappeler de mettre à jour map_dbg.xml chaque fois map.xml est mis à jour
J'ai configurer un simple cible ant qui remplace le apikey avec une clé de débogage ou d'un relâchement de la touche. C'est vraiment simple et conserve le code indésirable logique.
Dans la Carte V2, il est facile d'envoyer séparer les touches à l'aide de Android Studio Gradle outil. J'ai mis en place un moyen pour que. veuillez vérifier le lien ici.