Diese App wird erst ausgeführt, wenn Sie die Google Play-Dienste (über Bazaar) aktualisieren.

100

Ich teste die neue Google Maps API V2 für Android und erhalte diese Meldung, wenn die App gestartet wird:

MainActivity zeigt eine Fehlermeldung an

Dies läuft auf einem 4.1-Emulator.

Hier ist meine AndroidManifest.xmlDatei:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.maptest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <permission
        android:name="com.example.maptest.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.example.maptest.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <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"/>

    <!-- Require OpenGL ES version 2 -->
    <uses-feature
          android:glEsVersion="0x00020000"
          android:required="true"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="##myapikey##"/>

    </application>
</manifest>

Datei MainActivity.java:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Datei activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment"/>
</RelativeLayout>

Wenn Sie auf "Aktualisieren" klicken, stürzt die App mit dem folgenden Stacktrace ab:

E/Trace(1034): error opening trace file: No such file or directory (2)
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
D/gralloc_goldfish(1034): Emulator without GPU emulation detected.
D/AndroidRuntime(1034): Shutting down VM
W/dalvikvm(1034): threadid=1: thread exiting with uncaught exception (group=0x40a13300)

E/AndroidRuntime(1034): FATAL EXCEPTION: main
E/AndroidRuntime(1034): android.content.ActivityNotFoundException: No Activity found to handle Intent
  { act=android.intent.action.VIEW dat=http://play.google.com/store/apps/details? \
  id=com.google.android.apps.bazaar flg=0x80000 pkg=com.android.vending }
E/AndroidRuntime(1034):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
E/AndroidRuntime(1034):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
E/AndroidRuntime(1034):     at android.app.Activity.startActivityForResult(Activity.java:3351)
E/AndroidRuntime(1034):     at android.app.Activity.startActivityForResult(Activity.java:3312)
E/AndroidRuntime(1034):     at android.app.Activity.startActivity(Activity.java:3522)
E/AndroidRuntime(1034):     at android.app.Activity.startActivity(Activity.java:3490)
E/AndroidRuntime(1034):     at com.google.android.gms.internal.c$2.onClick(Unknown Source)
E/AndroidRuntime(1034):     at android.view.View.performClick(View.java:4084)
E/AndroidRuntime(1034):     at android.view.View$PerformClick.run(View.java:16966)
E/AndroidRuntime(1034):     at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(1034):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(1034):     at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1034):     at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime(1034):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1034):     at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(1034):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime(1034):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(1034):     at dalvik.system.NativeStart.main(Native Method)

Ich habe auch auf das Google Play Services-Projekt verwiesen. Was mache ich hier falsch?

AKTUALISIEREN

Der entsprechende Fehler im Google Issue Tracker ( https://issuetracker.google.com/issues/35822258 ) wurde vor einiger Zeit behoben.

Jetzt können Sie die Google Maps Android API im Emulator verwenden und virtuelle Geräte mit Play-Diensten erstellen, wie in dieser Antwort beschrieben:

https://stackoverflow.com/a/46246782/5140781

soren.qvist
quelle
Verwenden Sie avd mit Google API oder einfachem Android?
Selvin
Normales Android, obwohl ich gerade versucht habe, für 4.1 auf die Google-APIs umzusteigen, und es ist dasselbe.
soren.qvist
Seltsamerweise betrachte ich genau das gleiche Problem zur gleichen Zeit. Ich gehe bisher davon aus, dass das Google Play Services APK nicht auf dem Emulator installiert ist. Der Fehler liegt darin, dass die App versucht, Google Play (den Store) zu starten, um die APK zu installieren. Auf einem Gerät funktioniert es wahrscheinlich einwandfrei.
Gazreese
2
Erhöht
Gazreese
1
@ soren.qvist Wie
JJD

Antworten:

42

Laut einer Diskussion mit Android-Entwicklern auf Google+ ist das Ausführen der neuen Map-API auf dem Emulator derzeit nicht möglich.

(Der Kommentar stammt von Zhelyazko Atanasov gestern um 23:18 Uhr. Ich weiß nicht, wie ich direkt darauf verlinken soll.)

Außerdem wird der Teil " (über Basar) " nicht angezeigt, wenn Sie von einem tatsächlichen Gerät aus ausgeführt werden, und die Schaltfläche "Aktualisieren" öffnet den Play Store. Ich gehe davon aus, dass Bazaar Google Play Services auf dem Android-Emulator bereitstellen soll, aber es ist noch nicht fertig ...

nicopico
quelle
15
Nun, das ist unglücklich
soren.qvist
Ich habe versucht, die neueste GmsCore.apk direkt in den Emulator zu kopieren, aber das funktioniert auch nicht. Es würde wahrscheinlich funktionieren, wenn ich genau wüsste, welche APKs von meinem gerooteten Gerät kopiert werden sollen.
James Wald
56

AKTUALISIEREN

Die Google Maps API v2 ist jetzt auf den neuesten Google-Systemabbildern installiert (API: 19 ARM oder x86).
Ihre Anwendung sollte also nur mit den neuen Bildern funktionieren. Diese Dateien müssen nicht installiert werden.

Ich habe versucht, eine Android Google Maps V2-Anwendung unter einem Emulator auszuführen. Nachdem Google Play Services endlich ausgeführt wurde, habe ich mein SDK auf Google Play Services Version 4 aktualisiert, und mein Emulator hat meine Anwendung nicht mehr ausgeführt.

Ich habe jetzt herausgefunden, wie ich meinen Emulator von meinem Transformator-Tablet aus aktualisieren kann. (Sie benötigen kein Tablet, da Sie die folgenden Dateien herunterladen können.)

Ich habe Titanium Backup verwendet, um mein Asus Eee Pad Transformer (TF101) zu sichern, und dann die APK- Dateien com.android.vending und com.google.android.gms aus dem Backup abgerufen .

Ich habe diese auf einem Emulator installiert, der mit Plattform konfiguriert ist: 4.1.2, API-Level: 16, CPU Intel / Atom x86) und meine Google Maps V2-Anwendung funktioniert wieder.

Das war alles. Keiner der anderen Schritte in Bezug auf / system / app war erforderlich.

Meine Anwendung verwendet nur die Google Maps-API. Zweifellos sind weitere Schritte erforderlich, wenn Sie andere Google Play-Dienste verwenden.

Neue Dateien für die neuesten Google Play-Dienste:

Gleiche Anweisungen wie zuvor: Erstellen Sie einen neuen Emulator mit einer CPU / ABI , einem Nicht-Google-API-Ziel (Versionen 10-19 funktionieren) und einer GPU- Emulation, die ein- oder ausgeschaltet ist, und installieren Sie dann die Dateien:

adb install com.android.vending-20140218.apk
adb install com.google.android.gms-20140218.apk

Wenn Sie einen vorhandenen Emulator aktualisieren, müssen Sie möglicherweise frühere Versionen deinstallieren, indem Sie:

adb uninstall com.android.vending
adb uninstall com.google.android.gms

Das ist alles.

Danbrough
quelle
Es spielt keine Rolle, ob Ihr Emulator x86 oder ARM ist. Plattform: 4.2 ist auch in Ordnung.
Dan Brough
1
Laut developer.android.com/google/play-services/index.html . Geräte mit Android 2.2 (dh API Level 8) sollten ausreichen, solange das Gerät auch über GL ES Version 2 verfügt.
Jarl
1
Ich habe versucht, diese Dateien zu installieren, aber adb hat mir die Fehlermeldung angezeigt, dass die Dateien bereits installiert wurden. Ich habe versucht, neu zu installieren, dann wurde festgestellt, dass die Zertifikate inkonsistent sind. Was sollte ich dann tun?
Huong
Ich konnte vorinstallierte Pakete mit adb uninstall com.android.vendingund deinstallieren adb uninstall com.google.android.gms. Nach der Installation der oben genannten Pakete wird meine Anwendung ausgeführt, aber EGL_emulation: eglSurfaceAttrib not implementedim Protokoll werden Warnmeldungen angezeigt, und in der Anwendung ist keine Zuordnung sichtbar. Dies ist meines Erachtens ein Emulator- / GPU-Problem. Meine GPU ist Radeon HD6870und ich habe Android 4.1.2 ohne Google APIs auf dem Emulator ausgeführt.
dvim
In Bezug auf "EGL_emulation: eglSurfaceAttrib nicht implementiert" versuchen Sie möglicherweise "Host-GPU verwenden" unter den Emulationsoptionen.
Dan Brough
39

Ich habe ungefähr einen Tag damit verbracht, die neue gmaps- API (Google Maps Android API v2) auf dem Android-Emulator zu konfigurieren . Keine der Methoden, die ich im Internet gefunden habe, funktionierte für mich richtig. Aber ich habe es trotzdem getan. Hier ist, wie:

  1. Erstellen Sie einen neuen Emulator mit der folgenden Konfiguration:

Geben Sie hier die Bildbeschreibung ein

Bei den anderen Versionen konnte ich aufgrund verschiedener Fehler bei der Installation der erforderlichen Anwendungen nicht konfigurieren.

2) Starten Sie den Emulator und installieren Sie die folgenden Anwendungen:

  • GoogleLoginService.apk
  • GoogleServicesFramework.apk
  • Phonesky.apk

Sie können dies mit folgenden Befehlen tun:

2.1) adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
2.2) adb shell chmod 777 /system/app
2.3-2.5)adb push Each_of_the_3_apk_files.apk /system/app/

Links zum Herunterladen von APK-Dateien . Ich habe sie von meinem gerooteten Android-Gerät kopiert.

3) Installieren Sie Google Play Services und Google Maps auf dem Emulator. Ich habe einen Fehler 491, wenn ich sie aus dem Google Play Store installiere . Ich habe die Apps in den Emulator hochgeladen und die Installation lokal ausgeführt. (Sie können adbdies installieren). Links zu den Apps:

4) Nach diesen Schritten habe ich erfolgreich ein Demo-Beispiel auf dem Emulator ausgeführt. Hier ist ein Screenshot:

Google Maps

Paha
quelle
Ich denke, diese Methode hat einige unnötige Schritte. Versuchen Sie meine Methode aus einer der anderen Antworten mit nur zwei zu installierenden Apks ...
Nemanja Kovacevic
Ich habe Ihre Methode ausprobiert, aber beim Laden von Anwendungen in das System / App-Verzeichnis hat adb einen Fehler generiert, der besagt, dass nicht genügend freier Speicherplatz vorhanden ist. Das Erstellen eines neuen Emulators mit viel Speicher hat nicht geholfen. Bei anderen Versionen des Emulators funktionierte Ihre Methode nicht.
Paha
1
In Schritt 3) lautet der Installationsbefehl adb install com.google.android.apps.maps-1.apkund adb install com.google.android.gms-2.apk.
Sulai
Und stellen Sie sicher, dass Sie eine Version des Google Play-Dienstes erhalten, die Ihren Anforderungen entspricht. Sie können sie von papktop.com/tag/google-play-services-apk herunterladen .
Sulai
Stellen Sie einfach sicher, dass Sie immer die neueste Google Play APK-Version installieren, da Sie mit Google Play v2 derzeit kein Update installieren können (was den bösen 491-Fehler verursacht) und dieses Update zum Ausführen von Google Maps-Anwendungen erforderlich ist.
Serhiy
29

Ich beantworte diese Frage zum zweiten Mal, weil die Lösung, die ich ausprobiert habe und die zuerst nicht funktioniert hat, jetzt funktioniert und ich die Schritte neu erstellen kann, damit sie funktioniert :)

Ich hatte auch das Gefühl, dass das Fehlen des Google Play Store hier ein Schuldiger ist. Deshalb habe ich versucht, den Google Play Store durch Ratschläge zu diesem Link und diesem Link zusammen auf dem Emulator zu installieren . Ich hatte einige Schwierigkeiten, aber am Ende ist es mir gelungen, den Google Play Store zu installieren und ihn durch Herunterladen einer zufälligen App zu testen. Bei der Kartenaktivität wurde die Nachricht jedoch weiterhin mit der Schaltfläche "Aktualisieren" angezeigt. Dieser Knopf würde mich zum Laden bringen, aber dort würde ich eine Nachricht über "Artikel nicht gefunden" erhalten und Karten funktionierten immer noch nicht. An diesem Punkt gab ich auf.

Gestern habe ich versehentlich die gleiche Test-App gestartet und es hat funktioniert! Ich war sehr verwirrt, aber schnell habe ich einen Unterschied zu dem Emulator gemacht, in dem er funktioniert, und einen neuen sauberen, und ich habe zwei Apps für den funktionierenden im Verzeichnis / data / app / ermittelt: com.android.vending-1. apk und com.google.android.gms-1.apk. Dies ist seltsam, da ich bei der Installation von Google Play Store anhand der Anweisungen dieser Websites Phonesky.apk, GoogleServicesFramework.apk und GoogleLoginService.apk in einen anderen Ordner / System / App verschoben habe.

Wie auch immer, jetzt funktioniert die Android Google Maps API v2 auf meinem Emulator. Dies sind die Schritte, um dies zu tun:


Erstellen Sie einen neuen Emulator

  • Wählen Sie für das Gerät "5.1 '' WVGA (480 x 800: mdpi)".
  • Wählen Sie als Ziel "Android 4.1.2 - API Level 16".
  • Wählen Sie für "CPU / ABI" "ARM"
  • Überlassen Sie den Rest den Standardeinstellungen

Dies sind die Einstellungen, die für mich funktionieren. Ich weiß es nicht für andere.


Starten Sie den Emulator


Installieren Sie com.android.vending-1.apk und com.google.android.gms-1.apk über den ADB-Installationsbefehl


Google Maps sollte jetzt in Ihrem Emulator funktionieren.

Nemanja Kovacevic
quelle
Hier ist der Link zu meinem Blog mit der Beschreibung dessen, was ich versucht habe, um diese Arbeit zu machen. Nemanjakovacevic.net/blog/2012/12/…
Nemanja Kovacevic
Leider gibt Google Play Services Revision 4 einen neuen Fehler: Google Play Services veraltet. Benötigt 2012100, aber gefunden 2010110
Ilja S.
3
Ok, wenn Sie Spieldienste 4. Revision haben, schauen Sie sich die Antwort von @danbrough an und laden Sie die im Kommentar angegebenen Apks herunter: Link
Ilja S.
1
Beachten Sie, dass dies auch mit x86 funktioniert, wodurch der Emulator viel schneller wird!
Koffein
3

Ich habe eine (deutsche) Beschreibung erstellt, wie es funktioniert . Grundsätzlich benötigen Sie einen Emulator mit mindestens API-Level 9 und keinen Google-APIs. Dann werden Sie die APK - Dateien von einem bekommen müssen verwurzelt Gerät:

adb -d pull /data/app/com.android.vending-2.apk
adb -d pull /data/app/com.google.android.gms-2.apk

und installieren Sie sie im Emulator:

adb -e install com.android.vending-2.apk
adb -e install com.google.android.gms-2.apk

Sie können sogar die native Google Maps-App ausführen, wenn Sie einen Emulator mit mindestens API-Stufe 14 haben und zusätzlich installieren com.google.android.apps.maps-1.apk

Habe Spaß.

Kurt Huwig
quelle
2

Ich habe versucht, ein Android Google Maps v2 unter einem Emulator auszuführen, und ich habe viele Möglichkeiten gefunden, dies zu tun, aber keine davon hat für mich funktioniert. Ich habe immer diese Warnung im Logcat Google Play services out of date. Requires 3025100 but found 2010110und wenn ich Google Play-Dienste auf dem Emulator aktualisieren möchte, ist nichts passiert. Das Problem war, dass das com.google.android.gms APK nicht mit der Version der Bibliothek in meinem Android SDK kompatibel war.

Ich habe diese Dateien "com.google.android.gms.apk", "com.android.vending.apk" auf meinem Emulator installiert und meine App Google Maps v2 hat einwandfrei funktioniert. Keiner der anderen Schritte in Bezug auf / system / app war erforderlich.

Adil
quelle
1
Dies sind die zu installierenden Dateien: vending.apk und gms.apk
Adil
2

Diese App wird erst ausgeführt, wenn Sie Google Play Services aktualisieren. Ich habe es so lange versucht, aber ich habe die Karte immer noch nicht erhalten ... Es wird nur ein leerer Bildschirm angezeigt, auch wenn ich meinen Google Play-Dienst durch den folgenden Kommentar geändert habe.


Überprüfen Sie die Manifestdatei Ihrer Wiedergabedienste und den Versionscode für die APK-Datei com.google.android.gms. Im Folgenden ist es "3136110". Laden Sie diese APK-Dateien herunter und installieren Sie sie über eine DOS-Eingabeaufforderung. Führen Sie jedoch vor der Installation Ihren Zielemulator aus.

package="com.google.android.gms"
android:versionCode="3136110"
android:versionName="3.1.36 (673201-10)

Ich habe diese APK-Dateien von diesem Link erhalten .

Benutzer
quelle
2

Ich habe dieses Problem mit den folgenden Schritten gelöst:

  • Im Emulator:

    Sie müssen die neueste API verwenden Google APIs(Google Inc.)-API Level 19.

    Machen Sie den Rest der Dinge, die im Screenshot selbst platziert sind.

    Geben Sie hier die Bildbeschreibung ein

  • API-Schlüssel:

    Erstellen Sie einen neuen API-Schlüssel und überprüfen Sie sorgfältig den Google Map-API-Schlüssel und den SHA-Schlüssel.

  • Google Play Services:

    Sie müssen die neuesten Google Play Services com.android.vending-4.8.20.apk herunterladen . Wenn dieser Website nicht funktionieren, können Sie im Internet viele Websites mit dem Namen finden com.android.vending 4.8.20.apk.

    Sie können die Google Play-Dienste mithilfe der Eingabeaufforderung ausführen adb install com.android.vending 4.8.20.apk.

    Hinweis: Sie müssen die neuesten Google Play-Dienste herunterladen, da die neueste Version von Jahr zu Jahr im Internet aktualisiert wird.

    Ausgabe :

    Geben Sie hier die Bildbeschreibung ein

Steve
quelle
1
@JJD Ich bin bearbeitet check it out. Es wird funktionieren. Danke für das Zeigen.
Steve
0

Nach dem Update auf ADT 22.0.1 gab der Google Maps-Dienst aufgrund privater Android-Bibliotheken einen Fehler aus und die App stürzte ab. Also habe ich endlich die Lösung gefunden und es hat bei mir funktioniert.

Installieren Sie einfach die Google Play-Dienstbibliothek und gehen Sie zu google-play-service/libproject/google-play-services_libvon https://www.dropbox.com/sh/2ok76ep7lmav0qf/9XVlv61D2b. Importieren Sie das in Ihren Arbeitsbereich. Bereinigen Sie Ihr Projekt dort, wo Sie gogole-play-services-lib verwenden möchten, und erstellen Sie es erneut. Gehen Sie zu Projekt -> Eigenschaften -> Java BuildPath -> wählen Sie "Private Android-Bibliotheken, Android-Abhängigkeiten, Google-Play-Service".

Gehen Sie in den Eigenschaften selbst zu Android und wählen Sie eine der Versionen aus. Wählen Sie dann Hinzufügen und wählen Sie google-play-service-lib aus. Drücken Sie dann auf Anwenden und schließlich auf OK.

Gehen Sie zum Schluss zu Projekt -> Android Tools -> Android Support Libraries. Akzeptieren Sie die Lizenz und führen Sie nach der Installation Ihr Projekt aus.

Es wird gut funktionieren.

Schatz Shah
quelle
0

Installieren Sie im Android SDK Manager: Extras: Google Play-Dienste

Franck
quelle
0
 just change it to 

compile 'com.google.android.gms:play-services-maps:9.6.0'
compile 'com.google.android.gms:play-services-location:9.6.0'

Das funktioniert bei mir. Die aktuelle Version ist 10.0.1

Jagapathi
quelle