Questa app non funzionerà se non aggiorni Google Play Services (tramite Bazaar)


100

Sto testando la nuova API di Google Maps V2 per Android e ricevo questo messaggio all'avvio dell'app:

MainActivity mostra un messaggio di errore

Funziona su un emulatore 4.1.

Ecco il mio AndroidManifest.xmlfile:

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

File 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;
    }
}

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

Facendo clic su "Aggiorna" si arresta in modo anomalo l'app con il seguente stacktrace:

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)

Ho anche fatto riferimento al progetto Google Play Services. Cosa sto facendo di sbagliato qui?

AGGIORNARE

Il bug corrispondente nel tracker dei problemi di Google ( https://issuetracker.google.com/issues/35822258 ) è stato risolto qualche tempo fa.

Ora puoi utilizzare l'API Android di Google Maps nell'emulatore e creare dispositivi virtuali con i servizi di riproduzione come descritto in questa risposta:

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


Stai usando avd con google api o semplice android?
Selvin

Semplice Android, anche se ho appena provato a passare alle API di Google per 4.1 ed è lo stesso.
soren.qvist

Stranamente sto osservando esattamente lo stesso problema esattamente nello stesso momento. Finora presumo che sia perché l'APK di Google Play Services non è installato sull'emulatore. L'errore è dovuto al fatto che l'app sta tentando di avviare Google Play (lo store) per installare l'APK. Probabilmente funzionerà bene su un dispositivo.
gazreese


Risposte:


42

Secondo una discussione con gli sviluppatori Android su Google+, al momento non è possibile eseguire la nuova API Map sull'emulatore.

(Il commento è di Zhelyazko Atanasov ieri alle 23:18, non so come collegarmi direttamente ad esso)

Inoltre, non vedi la parte " (tramite Bazaar) " quando esegui da un dispositivo reale e il pulsante di aggiornamento apre il Play Store. Suppongo che Bazaar abbia lo scopo di fornire Google Play Services sull'emulatore Android, ma non è ancora pronto ...


15
Beh, è ​​un peccato
soren.qvist

Ho provato a copiare l'ultimo GmsCore.apk direttamente nell'emulatore, ma neanche questo funziona. Probabilmente funzionerebbe se sapessi esattamente quali APK copiare dal mio dispositivo rooted.
James Wald

56

AGGIORNARE

L'API di Google Maps v2 è ora installata sulle ultime immagini di sistema di Google (api: 19 ARM o x86).
Quindi la tua applicazione dovrebbe funzionare solo con le nuove immagini. Non è necessario installare questi file.

Ho provato a eseguire un'applicazione Android Google Maps V2 con un emulatore e una volta che ho finalmente eseguito Google Play Services, ho aggiornato il mio SDK alla revisione 4 di Google Play Services e il mio emulatore non eseguiva più la mia applicazione.

Ora ho capito come aggiornare il mio emulatore dal mio tablet con trasformatore. (Non avrai bisogno di un tablet poiché puoi scaricare i file di seguito.)

Ho utilizzato Titanium Backup per eseguire il backup del mio Asus Eee Pad Transformer (TF101) e poi ho preso i file APK com.android.vending e com.google.android.gms dal backup.

Li ho installati su un emulatore configurato con la piattaforma: 4.1.2, API Level: 16, CPU Intel / Atom x86) e la mia applicazione Google Maps V2 funziona di nuovo.

Questo era tutto .. nessuno degli altri passaggi relativi a / system / app era richiesto.

La mia applicazione utilizza solo l'API di Google Maps, senza dubbio, sono necessari ulteriori passaggi se utilizzi altri servizi di Google Play.

Nuovi file per i servizi Google Play più recenti:

Stesse istruzioni di prima: crea un nuovo emulatore con qualsiasi CPU / ABI , una destinazione API non Google (le versioni 10-19 funzionano) e l' emulazione GPU attiva o disattiva, quindi installa i file:

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

Se stai aggiornando un emulatore esistente, potresti dover disinstallare le versioni precedenti:

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

È tutto.


Non importa se il tuo emulatore è x86 o ARM. Piattaforma: anche 4.2 va bene.
Dan Brough

1
Secondo developer.android.com/google/play-services/index.html . I dispositivi con Android 2.2 (ovvero il livello API 8) dovrebbero essere sufficienti fintanto che i dispositivi hanno anche GL ES versione 2.
Jarl

1
Ho provato a installare quei file ma adb mi ha mostrato un messaggio di errore che i file erano già installati. Ho provato a reinstallare, poi ho detto che i certificati sono incoerenti. Cosa dovrei fare allora?
huong

Sono stato in grado di disinstallare i pacchetti preinstallati con adb uninstall com.android.vendinge adb uninstall com.google.android.gms. Dopo aver installato i pacchetti sopra menzionati la mia applicazione viene eseguita ma vedo EGL_emulation: eglSurfaceAttrib not implementedmessaggi di avviso nel registro e nessuna mappa è visibile nell'applicazione. Questo è, credo, un problema di emulatore / GPU. La mia GPU è Radeon HD6870e stavo eseguendo Android 4.1.2 senza API di Google sull'emulatore.
dvim

Per quanto riguarda "EGL_emulation: eglSurfaceAttrib non implementato" forse prova "Use Host GPU" sotto le opzioni di emulazione.
Dan Brough

39

Ho impiegato circa un giorno per configurare la nuova API gmaps (Google Maps Android API v2) sull'emulatore Android. Nessuno dei metodi che ho trovato su Internet funzionava correttamente per me. Ma l'ho fatto comunque. Ecco come:

  1. Crea un nuovo emulatore con la seguente configurazione:

Inserisci qui la descrizione dell'immagine

Sulle altre versioni non ho potuto configurare a causa di vari errori durante l'installazione delle applicazioni necessarie.

2) Avvia l'emulatore e installa le seguenti applicazioni:

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

Puoi farlo con i seguenti comandi:

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/

Collegamenti per scaricare i file APK . Li ho copiati dal mio dispositivo Android con root.

3) Installa Google Play Services e Google Maps sull'emulatore. Ho un errore 491, se li installo da Google Play Store. Ho caricato le app nell'emulatore ed eseguito l'installazione in locale. (Puoi usare adbper installarlo). Collegamenti alle app:

4) Dopo questi passaggi ho eseguito con successo un campione demo sull'emulatore. Ecco uno screenshot:

Google Maps


Penso che questo metodo abbia alcuni passaggi inutili. Prova il mio metodo da una delle altre risposte con solo due apk da installare ...
Nemanja Kovacevic

Ho provato il tuo metodo, ma al caricamento delle applicazioni nel sistema / app dir adb ha generato un errore che diceva che non è abbastanza spazio libero. La creazione di un nuovo emulatore con una grande quantità di memoria non ha aiutato. Su altre versioni dell'emulatore il tuo metodo non ha funzionato.
Paha

1
Nel passaggio 3) il comando di installazione è adb install com.google.android.apps.maps-1.apke adb install com.google.android.gms-2.apk.
sulai

E assicurati di ottenere una versione del servizio Google Play adatta alle tue esigenze. Puoi scaricarli da papktop.com/tag/google-play-services-apk .
sulai

Assicurati solo di installare sempre l'ultima versione dell'APK di Google Play, perché al momento, Google Play v2, non ti consente di installare l'aggiornamento (dando il brutto errore 491) e questo aggiornamento è necessario per eseguire le applicazioni di Google Maps.
Serhiy

29

Sto rispondendo a questa domanda per la seconda volta, perché la soluzione che ho provato che all'inizio non funzionava ora funziona e posso ricreare i passaggi per farlo funzionare :)

Ho anche avuto la sensazione che la mancanza di Google Play Store sia un colpevole qui, quindi ho provato a installare Google Play Store sull'emulatore con un consiglio su questo collegamento e questo collegamento combinato. Ho avuto qualche difficoltà, ma alla fine sono riuscito ad installare Google Play Store e l'ho testato scaricando qualche app a caso. Ma l'attività delle mappe continuava a visualizzare il messaggio con il pulsante "Aggiorna". Quel pulsante mi avrebbe portato al negozio, ma lì avrei ricevuto un messaggio su "oggetto non trovato" e le mappe ancora non funzionavano. A quel punto ho rinunciato.

Ieri ho attivato per sbaglio la stessa app di prova e ha funzionato! Ero molto confuso, ma rapidamente ho creato una differenza dall'emulatore in cui funziona e uno nuovo pulito e ho determinato due app su quella funzionante in / data / app / directory: com.android.vending-1. apk e com.google.android.gms-1.apk. Questo è strano poiché, quando stavo installando Google Play Store seguendo le istruzioni di quei siti, stavo spingendo Phonesky.apk, GoogleServicesFramework.apk e GoogleLoginService.apk e in una cartella / sistema / app diversa.

Ad ogni modo, ora l'API di Google Maps per Android v2 sta funzionando sul mio emulatore. Questi sono i passaggi per farlo:


Crea un nuovo emulatore

  • Per il dispositivo , scegli "5,1" WVGA (480 x 800: mdpi) "
  • Come target , scegli "Android 4.1.2 - API level 16"
  • Per "CPU / ABI", scegli "ARM"
  • Lascia il resto alle impostazioni predefinite

Queste sono le impostazioni che funzionano per me. Non so per quelli diversi.


Avvia l'emulatore


installa com.android.vending-1.apk e com.google.android.gms-1.apk tramite il comando di installazione ADB


Google Maps dovrebbe funzionare ora nel tuo emulatore.


Ecco il link al mio blog con la descrizione di quello che ho provato a fare questo lavoro nemanjakovacevic.net/blog/2012/12/…
Nemanja Kovacevic

Purtroppo la revisione 4 dei servizi di Google Play fornisce un nuovo errore: i servizi di Google Play non sono aggiornati. Richiede 2012100 ma trovato 2010110
Ilja S.

3
Ok, se hai la quarta revisione dei servizi di gioco, guarda la risposta @danbrough e scarica gli apk specificati nel commento: link
Ilja S.

1
nota che funziona anche con x86, rendendo l'emulatore molto più scattante!
Caffeina

3

Ho creato una descrizione (tedesca) su come farlo funzionare . Fondamentalmente hai bisogno di un emulatore con almeno il livello API 9 e nessuna API di Google. Quindi dovrai ottenere gli APK da un dispositivo rooted :

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

e installali nell'emulatore:

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

Puoi anche eseguire l'app nativa di Google Maps, se hai un emulatore con almeno il livello API 14 e installa in aggiunta com.google.android.apps.maps-1.apk

Divertiti.


2

Ho provato a eseguire un Android Google Maps v2 con un emulatore e ho trovato molti modi per farlo, ma nessuno di loro ha funzionato per me. Ho sempre questo avviso nel Logcat Google Play services out of date. Requires 3025100 but found 2010110e quando voglio aggiornare i servizi di Google Play sull'emulatore non è successo nulla. Il problema era che l' APK com.google.android.gms non era compatibile con la versione della libreria nel mio SDK Android.

Ho installato questi file "com.google.android.gms.apk", "com.android.vending.apk" sul mio emulatore e la mia app Google Maps v2 ha funzionato bene. Nessuno degli altri passaggi relativi a / system / app era richiesto.


1
quelli sono i file da installare: vending.apk e gms.apk
Adil

2

Questa app non verrà eseguita se non aggiorni Google Play Services. L'ho provato per così tanto tempo, ma ancora non ho ricevuto la mappa ... Appare solo una schermata vuota, anche se ho modificato il mio servizio Google Play dato dal commento sotto ..


Controlla il file manifest dei servizi di riproduzione e controlla il codice della versione per il file APK com.google.android.gms. Di seguito, è "3136110". Scarica questi file APK e installali da un prompt di DOS, ma prima dell'installazione esegui l'emulatore di destinazione.

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

Ho ricevuto questi file APK da questo collegamento .


2

Ho risolto questi problemi eseguendo i seguenti passaggi:

  • In emulatore:

    Devi utilizzare l'ultima API Google APIs(Google Inc.)-API Level 19 .

    Fai il resto delle cose inserite nello screenshot stesso.

    inserisci qui la descrizione dell'immagine

  • Chiave API:

    Crea una nuova chiave API e controlla attentamente la chiave API di Google Map e la chiave SHA.

  • Servizi di Google Play:

    Devi scaricare l'ultimo Google Play Services com.android.vending-4.8.20.apk . In quel sito se Google Play Services non funzionava significa che puoi trovare molti siti in Internet denominaticom.android.vending 4.8.20.apk .

    puoi eseguire Google Play Services utilizzando il prompt dei comandi adb install com.android.vending 4.8.20.apk.

    Nota: devi scaricare gli ultimi servizi di Google Play perché di anno in anno l'ultima versione verrà aggiornata su Internet.

    uscita :

    inserisci qui la descrizione dell'immagine


1
@JJD Sono stato modificato, controlla. Funzionerà. Grazie per averlo indicato.
Steve

0

Dopo l'aggiornamento ad ADT 22.0.1, a causa delle librerie private Android, il servizio di Google Maps dava un errore e l'app si è bloccata. Quindi ho finalmente trovato la soluzione e ha funzionato per me.

Installa la libreria del servizio Google Play e poi vai a google-play-service/libproject/google-play-services_libda https://www.dropbox.com/sh/2ok76ep7lmav0qf/9XVlv61D2b. Importalo nel tuo spazio di lavoro. Pulisci il tuo progetto in cui desideri utilizzare gogole-play-services-lib, quindi crealo di nuovo e vai a Project -> Properties -> Java BuildPath -> seleziona "Android Private Libraries, Android Dependencies, google-play-service"

Nella stessa Proprietà, vai su Android, quindi scegli una delle versioni, quindi scegli aggiungi e seleziona google-play-service-lib, quindi premi applica e infine OK.

Alla fine, vai su Progetto -> Strumenti Android -> Librerie di supporto Android. Accetta la licenza e dopo l'installazione esegui il tuo progetto.

Funzionerà bene.



0

Da Android SDK Manager, installa: Extra: Google Play services


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'

questo funziona per me la versione corrente è 10.0.1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.