Meine Schritte:
- habe SHA1-Code von debug.keystore erhalten
- Erstellen Sie eine App in der Google Apis-Konsole
- aktiviert Google Map API v2
- Geben Sie SHA1; my.package.name ein
- API-Schlüssel abrufen
erstellte AndroidManifest-Datei:
<permission android:name="my.package.name.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="my.package.name.permission.MAPS_RECEIVE"/> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="true"> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY_API_KEY_HERE" /> <activity android:name="MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
Layout erstellt
- Setzen Sie "google-play-services.jar" in libs
Nach der Kompilierung habe ich Absturz:
ERROR/AndroidRuntime(10182): FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
at android.app.Activity.onCreateView(Activity.java:4716)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
at android.app.Activity.setContentView(Activity.java:1881)
at com.example.gm2.MyActivity.onCreate(MyActivity.java:16)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Danach habe ich das Layout geändert in:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
und MyActivity in geändert
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, MapFragment.newInstance());
transaction.commit();
Als Ergebnis wurde die Anwendung gestartet, aber ich habe die Karte nicht gesehen.
Konsolenprotokoll:
ERROR/Google Maps Android API(10369): Authorization failure.
Antworten:
Schritte :
android.library.reference.1=google-play-services_lib
YOUR_PROJECT/proguard-project.txt
.
Jetzt können Sie mit Google Map APIs V2 für Android Ihre eigene Google Map-App erstellen.
Wenn Sie eine Anwendung mit min SDK = 8 erstellen, verwenden Sie bitte die Android Support Library v4 + SupportMapFragment anstelle von MapFragment.
quelle
to enable "Google Maps Android API v2"
-Schritt hat mein Problem gelöst.Überprüfen Sie auch diesen Beitrag: Google Map Android Api V2-Beispielcode funktioniert nicht . Wenn Sie sicher sind, dass Sie die richtigen Schritte ausgeführt haben, folgen Sie der zweiten Antwort. Die Authentifizierung wird irgendwo zwischengespeichert. Versuchen Sie, die Anwendung manuell zu deinstallieren (genau wie bei einem normale Anwendung) dann "Ausführen" erneut das Projekt
quelle
bin
undgen
. Bereinigen, neu erstellen und die zwischengespeicherten Anmeldeinformationen werden erneuert.Da ich gerade viel Zeit damit verschwendet habe, die API zum Laufen zu bringen, werde ich versuchen, eine schrittweise Validierung für die Map API v2 durchzuführen:
Schritt 1: Beantragen Sie Ihren API-Schlüssel
Wenn Sie mit der Google API-Konsole nicht vertraut sind, lesen Sie die sehr gute Antwort von Rusfearuth oben.
Schritt 2: Überprüfen Sie Ihren SHA-Hash (in diesem Fall verwende ich den Debug-Schlüssel von Eclipse):
Auf einem Windows-Computer gelangen Sie über eine Eingabeaufforderung in Ihr Benutzerverzeichnis:
Sie erhalten so etwas wie:
Schauen Sie sich dann Ihren Paketnamen der Kartenaktivität an, z. B. com.example.mypackagename
Sie kombinieren dies und überprüfen dies mit Ihren Einstellungen in der Google API-Konsole:
Woher bekommen Sie Ihren API-Schlüssel:
Schritt 3. Manifestieren Sie Metadaten
Überprüfen Sie, ob die Metadaten vorhanden sind und den richtigen Schlüssel enthalten. Wenn Sie Ihre App freigeben, benötigen Sie einen anderen Schlüssel.
Schritt 4. Manifestfunktionen:
Sie benötigen diesen Eintrag, da die Karten-API einige Grafikunterstützung erfordert:
Keine Sorge, 99,7% der Geräte unterstützen dies.
Schritt 5. Manifestbibliothek:
Fügen Sie die Google-Bibliothek hinzu.
Schritt 6. Manifest-Berechtigungen:
Überprüfen Sie den Paketnamen zweimal: com.example.yourpackage
Fügen Sie die folgenden Berechtigungen hinzu:
Die folgenden Berechtigungen sind optional und nicht erforderlich, wenn Sie nur eine Karte anzeigen. Versuche sie nicht zu benutzen.
Schritt 7. Fügen Sie das Kartenfragment in Ihr Layout ein:
Wenn Sie 2.x Android-Versionen veröffentlichen, müssen Sie Unterstützung in Ihre Aktivität aufnehmen:
Für die Karte: Einträge zum Arbeiten enthalten
in Ihrem Aktivitätslayout (zB LinearLayout).
In meinem Fall muss ich das Projekt jedes Mal bereinigen, wenn ich etwas im Layout ändere. Scheint ein Fehler zu sein.
Schritt 8: Verwenden Sie Eclipse - Project - Clean.
Genießen!
quelle
Sie müssen das Bibliotheksprojekt verwenden, das sich befindet unter: ANDROID-SDK-DIRECTORY / extras / google / google_play_services / libproject
Dies wird Ihr erstes Problem beheben.
Ich bin mir bei Ihrer zweiten nicht sicher, aber es kann eine Nebenwirkung der ersten sein. Ich versuche immer noch, die Karte in meiner eigenen App zum Laufen zu bringen :)
quelle
Heute war ich mit diesem Problem konfrontiert. Ich habe Android Studio 2.1.3, Windows 10 verwendet. Während des Debuggens funktioniert es einwandfrei, aber wenn ich auf den Release-Modus aktualisiere, funktioniert es nicht. Ich habe alle Proguard-Bedingungen gelöscht und aktualisiert, aber dies war keine Lösung.
Die Lösung hängt mit der Projektstruktur zusammen. Die Datei google_maps_api.xml unterschied sich zwischen app \ src \ debug \ res und app \ src \ release \ res. Ich habe manuell kopiert und vom Debug in den Release-Ordner eingefügt.
Jetzt gehts.
quelle
Ich folgte den meisten, wenn nicht allen der oben erwähnten Vorschläge von Gunnar Bernstein und es funktionierte immer noch nicht. Es begann jedoch zu funktionieren, nachdem ich seinen Vorschlägen UND den folgenden gefolgt war:
Ich habe eine neue MapActivity mithilfe der Rechtsklick-Liste der Optionen von Android Studio erstellt: Neu -> Google -> Google Maps-Aktivität
Ich habe dann die Datei google_maps_api.xml geöffnet, die automatisch generiert wird, und über den angegebenen Link einen neuen API-SCHLÜSSEL erstellt. Ich habe alle Schritte ausgeführt und meinen neuen Schlüssel unter meinem aktuellen Projekt gespeichert. Ich habe dann meinen alten registrierten API-SCHLÜSSEL entfernt, da er nicht mehr benötigt wurde.
Unter der Manifest-Datei habe ich den alten API-KEY-Wert durch die von dieser neuen XML-Datei erstellte Zeichenfolgenverknüpfung ersetzt:
android:value="@string/google_maps_key
", anstatt den KEY direkt anzugeben.Entfernen Sie schließlich die neue MapActivity, behalten Sie jedoch die XML-Datei bei, die in diesem Prozess erstellt wurde.
Hinweis: Wenn Sie den API-Schlüssel auf diese Weise erstellen, wird in der Spalte "Einschränkungen" unter "Anmeldeinformationen" jetzt "Android-Apps" angegeben. Früher, als es nicht funktionierte, stand in der Spalte "Android Apps, 1 API" oder ähnliches. Ich weiß nicht, ob das einen Unterschied macht oder nicht.Hinweis: Nein, das bedeutet nur, dass für diesen API-Schlüssel keine bestimmte API ausgewählt ist (Konsole -> API-Schlüssel -> Schlüsseleinschränkungen -> API-Einschränkungen).Hinweis: Es sieht aus wie das Metadaten-Tag unter der Manifest-Datei:
wurde ersetzt durch:
Ich denke, dass beide verwendet werden können, aber es ist von Anfang an besser, letzteres zu verwenden.
Hinweis: Der Wert angegeben, in der build.gradle Datei unter Android -> DefaultConfig -> applicationId hat den Übereinstimmen Paketnamen Text unter der Seite Anmeldeinformationen.
quelle
Solved!!!
Fügen Sie dies einfach in Ihre Manifestdatei ein:
Beispielsweise...
Und bitte aktualisieren Sie Ihre Google Play Service-Bibliothek ... Gehen Sie zu Fenster -> Android SDK-Manager-> Google Play Service aktualisieren ... installiert ... löschen Sie die alte und behalten Sie diese. Nehmen Sie dies aus ANDROID-SDK-DIRECTORY / extras / google / google_play_services /
Danke. Bitte stimmen Sie ab
quelle
Ich habe diesen Fehler behoben, indem ich den Paketnamen in Manifest und App überprüft habe
build.gradle
.Im Manifest:
Ich verwende einen Paketnamen als:
In der App build.gradle:
Nach dem Wechsel zu
com.app.triapp
inbuild.gradle
wurde mein Problem gelöst.quelle
Ich migriere von V1 auf V2 von Google Maps. Beim Versuch, die App über Eclipse auszuführen, ist dieser Fehler aufgetreten. Die Hauptursache für mich war die Verwendung meines Release-Zertifikat-Keystores anstelle des Android-Debug-Keystores, der verwendet wird, wenn Sie ihn über Eclipse ausführen. Mit dem folgenden Befehl (OSX / Linux) erhalten Sie den SHA1-Schlüssel des Debug-Keystores:
Wenn Sie stattdessen Windows 7 verwenden, verwenden Sie diesen Befehl:
Es ist wahrscheinlich am besten, Ihre App vollständig von Ihrem Gerät zu deinstallieren, bevor Sie es mit einem neuen Schlüssel versuchen, da Android die Sicherheitsanmeldeinformationen zwischenspeichert.
quelle
"java.lang.NoClassDefFoundError: com.google.android.gms.R $ styleable"
A hatte diesen Fehler auch, müssen Sie: Datei -> Importieren -> Vorhandenen Android-Code in den Arbeitsbereich -> Durchsuchen -> Android-SDKS -> Extras -> Google -> Google_play_services -> lib_project -> Google_play_services_lib und OK. Überprüfen Sie das Projekt und beenden Sie.
Das Projekt geht zum Paket-Explorer. Gehen Sie nun zu Ihrem Projekt (mit Fehler) -> Eigenschaften -> Android und klicken Sie in der Bibliothek auf Hinzufügen ... die google_play_services_lib sollte da sein! hinzufügen und erneut versuchen :)
quelle
Ich hatte das gleiche Problem, aber es stellte sich heraus, dass ich zwei verschiedene Karten-API-Schlüssel mit demselben SHA-1-Fingerabdruck mit nahezu ähnlichem Paketnamen
com.bla.bla
und dem anderen erstellt habecom.bla.bla.something
.quelle
Ich hatte genau das gleiche Problem und musste nur das SDK für das Bibliotheksprojekt von MapsApiV2 auf Android 2.3.3 (API Level 10) einstellen.
quelle
Ich hatte das gleiche Problem. Nach ungefähr zwei Stunden googeln, erneut versuchen, API-Schlüssel viele Male neu generieren usw. stellte ich fest, dass ich den falschen Dienst in der Google APis-Konsole aktiviert hatte. Ich habe den Google Maps API v2-Dienst aktiviert , aber für Android Apps müssen Sie die Google Maps Android API v2 verwenden . Nach dem Aktivieren des richtigen Dienstes begannen alle zu arbeiten.
quelle
IHR ECLIPSE KANN DEN SHA1-SCHLÜSSEL GEÄNDERT HABEN, daher müssen Sie Ihren Google-Schlüssel mit dem neuen SHA1-Schlüssel hier neu generieren: https://console.developers.google.com/project/watchful-net-796/apiui/credential Kopieren Sie anschließend den neuen Schlüssel in Manifest und laden Sie diese Google-Seite einige Male neu, und Ihr Schlüssel wird aktualisiert, erstellen Sie Ihr Projekt neu, es wird funktionieren. P / S: Für meinen Fehler habe ich den .android-Ordner gelöscht, damit SHA1 wieder in den Schatten gestellt wird.
quelle
Ich habe den gleichen Schritt wie in Google Doc ausgeführt, aber ich habe den gleichen Fehler erhalten. Später stellte ich fest, dass ich meine App mit meinem app.keystore signierte und der SHA-Schlüssel, den ich zum Generieren des API-Schlüssels verwendete, der Debug-Schlüssel war.
Also entfernte ich einfach die
signingConfig signingConfig.generic
aus derbuild.gradle
Datei und meine Karte begann gut zu funktionieren.Hoffe das hilft jemandem.
quelle
Ich stand vor dem gleichen Problem.
Wenn Sie eine API für Ihre Release-Version der Anwendung ausgegeben haben. Dann funktioniert diese API nur für die Release-Version, nicht für die Debug-Version. Stellen Sie also sicher, dass Sie die Release-Version in Ihrem Telefon oder Emulator verwenden.
quelle
Für mich funktionierte alles sowohl in einem Emulator als auch auf einem physischen Gerät.
Es funktionierte jedoch nicht mehr für mich, als ich einen zweiten Computer zum Debuggen derselben App in einem Emulator mit einer neueren API-Ebene einrichtete.
Mir war nicht klar, dass der Fingerabdruck für diese Maschine geändert hat. Nachdem das Fehlerprotokoll für Authentifizierungsfehler im Geräteprotokoll angezeigt wurde, habe ich den Fingerabdruck in meiner Google Developer Console genau mit dem in der Fehlermeldung verglichen. Da habe ich den Unterschied gesehen. Nachdem ich der Entwicklerkonsole (in Kombination mit dem Paketnamen) den neuen Fingerabdruck hinzugefügt hatte, funktionierte meine App wie erwartet im Emulator auf dem neuen System.
Wenn Sie also ein neues System einrichten, überprüfen Sie Ihre Fingerabdrücke erneut!
quelle
SDK for Android
in der API-Konsole aktiviert ist.quelle