2013-04-14 36 views
14

Quando si integra un pulsante di accesso di Google Plus in un'app Android, osservo alcune differenze nel modo in cui il pulsante viene visualizzato su un dispositivo reale e nell'emulatore. Sono consapevole del fatto che gli APK dei servizi Google Plus non sono installati nell'emulatore, ma ciò può essere risolto estraendo gli APK da un dispositivo e installandoli nell'emulatore utilizzando APK.Google Play Services in emulatore, implementando il pulsante di accesso di Google Plus ecc.

Il mio attuale "implementazione" comprende semplicemente il pulsante di accesso in un layout, facendo riferimento al pulsante con il seguente codice XML:

<com.google.android.gms.common.SignInButton 
    android:id="@+id/sign_in_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

quando verifico il mio app sul dispositivo, il pulsante è tutto rosso e lucido, secondo le linee guida menzionate qui https://developers.google.com/+/mobile/android/sign-in. Ma quando si esegue l'emulatore, è solo un normale pulsante (sfondo grigio con testo nero) che dice "Accedi con Google".

Qualche idea sul perché i risultati sono diversi? Mi sono assicurato che stia eseguendo lo stesso livello API, e la risorsa sembra essere inserita correttamente anche sull'emulatore poiché mostra il pulsante di accesso effettivo (ma con un aspetto diverso).

Aggiornamento: Trovato un indizio in logcat; il messaggio "Pulsante di accesso non trovato, utilizzando invece segnaposto". praticamente spiega perché sto vedendo il pulsante grigio opaco sull'emulatore. Devo ancora capire perché; potrebbe essere il trucco "copia google plus apk dal dispositivo" non funziona correttamente.

+0

è il livello di API di Android lo stesso su dispositivo ed emulatore? – WarrenFaith

+0

Sì, come ho scritto nella mia domanda. –

risposta

52

Google Play Services funziona con le versioni 4.2.2 dell'emulatore Android ed è ufficialmente supportato come descritto nello Android documentation: Setup Google Play Services.

Aggiornamento

È ora possibile utilizzare le immagini Intel/x86 (HAXM-compatibile) per API 19 e più recente e per ARM, Google Play Services è disponibile sulla maggior parte delle immagini.

Configurazione dell'immagine

Per ottenere l'immagine giusta per il vostro device manager virtuale:

  • Aprire l'SDK di Android Direttore
  • Aprire il gruppo di Android 4.2.2 (API 17)
  • Verifica API Google
  • Verifica ARM EABI v7a Immagine del sistema

enter image description here

Per creare il dispositivo virtuale:

  • Aprire Android virtuale Gestione dispositivi
  • creare un nuovo dispositivo
  • Immettere un nome AVD
  • fissato l'obiettivo di Google API (Google Inc.) - Livello API 17
  • Salvare il dispositivo virtuale ed avviarlo ...

NotaCPU/ABI saranno fissati come ARM

enter image description here

Ora si dovrebbe essere in grado di utilizzare Google Play Services nell'emulatore. Tieni presente che devi impostare correttamente il target nel tuo progetto Android per le API di Google affinché Google Play Services funzioni.

+3

Ci sono piani per farlo funzionare con Intel Atom x86 image L'emulatore ARM è praticamente inutilizzabile – jophde

+0

Sono d'accordo con @jophde sul fatto che l'emulatore ARM è lento come un cane, richiede da 4 a 5 volte il tempo di avvio e di roba –

+0

im non è in grado di eseguire la mappa in emulatore, puoi aiutarmi per questo – Richa

0

Controllare le cartelle ldpi, mdpi, hdpi, ecc ... per una diversa grafica del pulsante. Il tuo emulatore è quasi sicuramente un DPI diverso dal tuo dispositivo.

+0

Penso che l'emulatore e il telefono abbiano le stesse impostazioni; Sto usando l'impostazione dell'emulatore Galaxy Nexus e collaudo con un telefono Galaxy Nexus. Indipendentemente da ciò, non c'è alcuna grafica, solo un semplice pulsante vecchio, sull'emulatore, mentre sul telefono c'è il logo "g +" e il testo localizzato. –

+0

Esistono diversi stili applicati in base al livello API, alla risoluzione dello schermo e al DPI. Hai guardato attraverso quelli? –

3

Ho provato la maggior parte delle combinazioni di esecuzione dell'emulatore, ma con e senza le API di Google, il che significa che ho provato con entrambe le modalità x86 e arm. Non ho trovato alcun modo di far funzionare l'apk dal mio telefono Galaxy Nexus per funzionare correttamente sull'emulatore.

Suppongo che questo sia in qualche modo correlato all'installazione e al funzionamento del Play Store, ho deciso di provare anche questo per vedere se avessi più fortuna. Io no; neanche quello potrebbe funzionare. Le icone del Play Store appaiono e possono essere lanciate, ma si chiudono immediatamente.

Che cosa ha fatto il lavoro però è stato quello di scaricare e installare i APK in fondo alla pagina qui:

http://umut.tekguc.info/en/content/google-android-map-v2-step-step

Dopo l'installazione del vending e gms pacchetti, il pulsante di login è apparso nella sua piena bellezza sotto il emulatore. Dal momento che non ho ancora implementato la funzionalità di accesso effettiva, non posso essere sicuro che funzionerà, ma almeno il pulsante ora sembra identico nella mia app sul mio dispositivo e nell'emulatore.

È inoltre necessario scaricare il software di Google Play Services (guardare sotto "Extra" nel gestore di Android SDK) e installare la libreria google-play-services_lib nel progetto (File-Importa-Android-Codice Android esistente in Area di lavoro, quindi selezionare ad esempio/opt/adt-bundle-linux/sdk/extras/google/google_play_services/libproject e selezionare google-play-services_lib).

Un altro aspetto interessante è che questo funzionerà solo con le impostazioni di emulazione Android "pure", non con le impostazioni di "API Google". Sembra che quest'ultimo abbia già alcune parti di quelle app installate nell'emulatore (non visibilmente e non funzionanti) e non sono riuscito a rimuovere le versioni esistenti per installare i file apk personalizzati che funzionavano come descritto sopra. Ho provato adb remove, adb install, adb install -r, e anche rimuovendo le directory da/data che hanno fallito.Sembra che Google stia cercando di rendere tutto ciò difficile.

Sono deluso che Google lo stia rendendo così difficile; Google potrebbe avere delle strane ragioni di licenza per tenere queste cose fuori dall'emulatore, ma se vogliono davvero che le persone utilizzino i loro servizi nelle loro app per Android hanno bisogno di rendere questi servizi disponibili nell'emulatore. Costringere le persone a sviluppare sempre su un dispositivo (con emulatori altrimenti eccellenti disponibili) oa far saltare le persone attraverso i cerchi (un sacco di googling, l'installazione di versioni non ufficiali/hackerate degli apk, ecc.) È semplicemente malvagio.

Aggiornamento finale prima di accettare la mia risposta; anche se il pulsante corretto con lo stile corretto viene ora visualizzato nell'emulatore, non riesco ancora a visualizzare la finestra di dialogo "Seleziona account" nell'emulatore. Quando/se lo farò condividerò la soluzione giusta qui.

+0

E pensavo che il loro motto fosse "non essere cattivo"! :) – GilliMonsta

+0

Viene visualizzato il messaggio: "Errore [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]" quando provo a installare gli APK. – GilliMonsta

+0

Come hai detto, l'installazione di Google Play Services con adb è possibile solo con un'immagine di sistema di emulazione Android "pura". Ma con tale immagine di sistema non è possibile aggiungere un account Google al telefono! E se controlli la compatibilità di Google Play Services con 'GoogleApiAvailability.getInstance(). IsGooglePlayServicesAvailable (activity)' ti dice che "Google Play Services non è supportato dal tuo dispositivo" :( – FlorianT

0

Android image with google API implemented Ho notato che da API 21 ci sono ARM e x86 le immagini con le API di Google implementato forse, se non avete problemi emulare l'utilizzo di Android 5 lo farà opere senza estrarre le APK

+0

ho usato Android 6.0 con google Api. ma non sta riproducendo il Play Store. – curiousMind

+0

I servizi di riproduzione di Google funzionano? Non ho provato ad usare il Play Store nell'emulatore ma selezionando l'immagine con l'API implementata mi sono permesso di utilizzare i servizi di riproduzione, forse puoi provare ad installare il Play Store usando il file apk mentre usi quell'immagine di Google API? – Fuseteam

Problemi correlati