Cette application ne fonctionnera que si vous mettez à jour les services Google Play (via Bazaar)

100

Je teste la nouvelle API Google Maps V2 pour Android, et je reçois ce message au lancement de l'application:

MainActivity affichant un message d'erreur

Cela fonctionne sur un émulateur 4.1.

Voici mon AndroidManifest.xmldossier:

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

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

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

Cliquez sur "Mettre à jour" pour bloquer l'application avec le stacktrace suivant:

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)

J'ai également fait référence au projet Google Play Services. Qu'est-ce que je fais de mal ici?

METTRE À JOUR

Le bogue correspondant dans le suivi des problèmes de Google ( https://issuetracker.google.com/issues/35822258 ) a été résolu il y a quelque temps.

Vous pouvez maintenant utiliser l'API Google Maps Android dans l'émulateur et créer des appareils virtuels avec les services Play comme décrit dans cette réponse:

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

soren.qvist
la source
Utilisez-vous avd avec google api ou android?
Selvin
Android ordinaire, même si j'ai juste essayé de passer à l'API Google pour 4.1 et c'est la même chose.
soren.qvist
Curieusement, je regarde exactement le même problème exactement au même moment. Je suppose jusqu'à présent que c'est parce que l'APK des services Google Play n'est pas installé sur l'émulateur. L'erreur est due au fait que l'application tente de lancer Google Play (le magasin) pour installer l'APK. Cela fonctionnera probablement bien sur un appareil.
gazreese

Réponses:

42

Selon une discussion avec les développeurs Android sur Google+, exécuter la nouvelle API Map sur l'émulateur n'est pas possible pour le moment.

(Le commentaire vient de Zhelyazko Atanasov hier à 23h18, je ne sais pas comment y établir un lien directement)

De plus, vous ne voyez pas la partie " (via Bazaar) " lors de l'exécution à partir d'un appareil réel, et le bouton de mise à jour ouvre le Play Store. Je suppose que Bazaar est censé fournir des services Google Play sur l'émulateur Android, mais il n'est pas encore prêt ...

Nicopico
la source
15
Eh bien, c'est malheureux
soren.qvist
J'ai essayé de copier le dernier GmsCore.apk directement dans l'émulateur mais cela ne fonctionne pas non plus. Cela fonctionnerait probablement si je savais exactement quels APK copier à partir de mon appareil enraciné.
James Wald
56

METTRE À JOUR

L'API Google maps v2 est désormais installée sur les dernières images système de Google (api: 19 ARM ou x86).
Votre application devrait donc fonctionner uniquement avec les nouvelles images. Il n'est pas nécessaire d'installer ces fichiers.

J'ai essayé d'exécuter une application Android Google Maps V2 sous un émulateur et une fois que j'ai enfin lancé les services Google Play, j'ai mis à jour mon SDK vers la révision 4 des services Google Play et mon émulateur ne voulait plus exécuter mon application.

J'ai maintenant travaillé sur la façon de mettre à jour mon émulateur à partir de ma tablette de transformation. (Vous n'aurez pas besoin d'une tablette car vous pouvez télécharger les fichiers ci-dessous.)

J'ai utilisé Titanium Backup pour sauvegarder mon Asus Eee Pad Transformer (TF101), puis j'ai récupéré les fichiers APK com.android.vending et com.google.android.gms à partir de la sauvegarde.

Je les ai installés sur un émulateur configuré avec la plate-forme: 4.1.2, niveau API: 16, CPU Intel / Atom x86) et mon application Google Maps V2 fonctionne à nouveau.

C'était tout ... aucune des autres étapes concernant / system / app n'était requise.

Mon application utilise uniquement l'API Google Maps, sans aucun doute, des étapes supplémentaires sont nécessaires si vous utilisez d'autres services Google Play.

Nouveaux fichiers pour les derniers services Google Play:

Mêmes instructions que précédemment: créez un nouvel émulateur avec n'importe quel CPU / ABI , une cible API non Google (les versions 10 à 19 fonctionnent) et un GPU émulation activée ou désactivée, puis installez les fichiers:

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

Si vous mettez à niveau un émulateur existant, vous devrez peut-être désinstaller les versions précédentes en:

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

C'est tout.

danbrough
la source
Peu importe si votre émulateur est x86 ou ARM. Plate-forme: 4.2 convient également.
Dan Brough
1
Selon developer.android.com/google/play-services/index.html . Les fonctionnalités avec Android 2.2 (c'est-à-dire le niveau d'API 8) devraient être suffisantes tant que les appareils ont également la version 2 de GL ES.
Jarl
1
J'ai essayé d'installer ces fichiers mais adb m'a montré un message d'échec indiquant que les fichiers étaient déjà installés. J'ai essayé de réinstaller, puis il a dit que les certificats étaient incohérents. Que dois-je faire alors?
huong
J'ai pu désinstaller des packages préinstallés avec adb uninstall com.android.vendinget adb uninstall com.google.android.gms. Après avoir installé les packages mentionnés ci-dessus, mon application s'exécute mais je vois EGL_emulation: eglSurfaceAttrib not implementeddes messages d'avertissement dans le journal et aucune carte n'est visible dans l'application. C'est, je crois, un problème d'émulateur / GPU. Mon GPU est Radeon HD6870et j'utilisais Android 4.1.2 sans API Google sur l'émulateur.
dvim
En ce qui concerne "EGL_emulation: eglSurfaceAttrib non implémenté" essayez peut-être "Use Host GPU" dans les options d'émulation.
Dan Brough
39

J'ai passé environ une journée à configurer la nouvelle API gmaps (Google Maps Android API v2) sur l'émulateur Android. Aucune des méthodes que j'ai trouvées sur Internet ne fonctionnait correctement pour moi. Mais je l'ai quand même fait. Voici comment:

  1. Créez un nouvel émulateur avec la configuration suivante:

Entrez la description de l'image ici

Sur les autres versions, je n'ai pas pu configurer à cause de diverses erreurs lorsque j'ai installé les applications nécessaires.

2) Démarrez l'émulateur et installez les applications suivantes:

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

Vous pouvez le faire avec les commandes suivantes:

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/

Liens pour télécharger des fichiers APK . Je les ai copiés depuis mon appareil Android rooté.

3) Installez les services Google Play et Google Maps sur l'émulateur. J'ai une erreur 491, si je les installe depuis Google Play Store. J'ai téléchargé les applications sur l'émulateur et exécuté l'installation localement. (Vous pouvez utiliseradb pour installer ceci). Liens vers les applications:

4) J'ai exécuté avec succès un exemple de démonstration sur l'émulateur après ces étapes. Voici une capture d'écran:

Google Maps

Paha
la source
Je pense que cette méthode comporte des étapes inutiles. Essayez ma méthode à partir de l'une des autres réponses avec seulement deux apks à installer ...
Nemanja Kovacevic
J'ai essayé votre méthode, mais lors du chargement des applications dans le répertoire système / application, adb a généré une erreur indiquant qu'il n'y a pas assez d'espace libre. La création d'un nouvel émulateur avec une grande quantité de mémoire n'a pas aidé. Sur les autres versions de l'émulateur, votre méthode ne fonctionnait pas.
Paha
1
À l'étape 3), la commande d'installation est adb install com.google.android.apps.maps-1.apket adb install com.google.android.gms-2.apk.
sulai
Et assurez-vous d'obtenir une version du service Google Play qui correspond à vos besoins. Vous pouvez les télécharger sur papktop.com/tag/google-play-services-apk .
sulai
Assurez-vous simplement que vous installez toujours la dernière version de Google Play APK, car pour le moment, Google Play v2 ne vous permettra pas d'installer la mise à jour (donnant la méchante erreur 491) et cette mise à jour est nécessaire pour exécuter les applications Google Maps.
Serhiy
29

Je réponds à cette question pour la deuxième fois, car la solution que j'ai essayée et qui ne fonctionnait pas au début fonctionne maintenant, et je peux recréer les étapes pour la faire fonctionner :)

J'ai également eu le sentiment que l'absence de Google Play Store est un coupable ici, j'ai donc essayé d'installer Google Play Store sur l'émulateur en suivant des conseils sur ce lien et ce lien combiné. J'ai eu quelques difficultés, mais à la fin, j'ai réussi à installer Google Play Store et à le tester en téléchargeant une application aléatoire. Mais l'activité des cartes a continué d'afficher le message avec le bouton "Mettre à jour". Ce bouton m'emmènerait au magasin, mais là, j'obtiendrais un message sur "élément non trouvé" et les cartes ne fonctionnaient toujours pas. À ce moment-là, j'ai abandonné.

Hier, j'ai lancé la même application de test par accident et cela a fonctionné! J'étais très confus, mais j'ai rapidement fait une différence avec l'émulateur où il fonctionne et un nouveau propre et j'ai déterminé deux applications sur celle qui fonctionne dans le répertoire / data / app /: com.android.vending-1. apk et com.google.android.gms-1.apk. C'est étrange car, lorsque j'installais Google Play Store selon les instructions de ces sites, je poussais Phonesky.apk, GoogleServicesFramework.apk et GoogleLoginService.apk et vers un autre dossier / système / application.

Quoi qu'il en soit, maintenant l'API Google Maps v2 Android fonctionne sur mon émulateur. Voici les étapes pour ce faire:


Créer un nouvel émulateur

  • Pour appareil , choisissez «5.1 '' WVGA (480 x 800: mdpi)»
  • Pour cible , choisissez "Android 4.1.2 - API niveau 16"
  • Pour "CPU / ABI", choisissez "ARM"
  • Laissez le reste aux valeurs par défaut

Ce sont les paramètres qui fonctionnent pour moi. Je ne sais pas pour les différents.


Démarrez l'émulateur


installez com.android.vending-1.apk et com.google.android.gms-1.apk via la commande d'installation ADB


Google Maps devrait maintenant fonctionner dans votre émulateur.

Nemanja Kovacevic
la source
Voici le lien vers mon blog avec la description de ce que j'ai essayé de faire fonctionner nemanjakovacevic.net/blog/2012/12/…
Nemanja Kovacevic
Malheureusement, la révision 4 des services Google Play donne une nouvelle erreur: les services Google Play sont obsolètes. Nécessite 2012100 mais trouvé 2010110
Ilja
3
Ok, si vous avez la 4ème révision des services de jeu, regardez la réponse @danbrough et téléchargez les apks spécifiés dans le commentaire: lien
Ilja S.
1
notez que cela fonctionne aussi avec x86, ce qui rend l'émulateur beaucoup plus vif!
Caféine
3

J'ai créé une description (en allemand) comment le faire fonctionner . Vous avez essentiellement besoin d'un émulateur avec au moins le niveau d'API 9 et sans API Google. Ensuite, vous devrez obtenir les APK à partir d'un appareil enraciné :

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

et installez-les dans l'émulateur:

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

Vous pouvez même exécuter l'application native Google Maps, si vous avez un émulateur avec au moins le niveau d'API 14 et installez en plus com.google.android.apps.maps-1.apk

S'amuser.

Kurt Huwig
la source
2

J'ai essayé d'exécuter un Android Google Maps v2 sous un émulateur, et j'ai trouvé de nombreuses façons de le faire, mais aucune n'a fonctionné pour moi. J'ai toujours cet avertissement dans le Logcat Google Play services out of date. Requires 3025100 but found 2010110et lorsque je veux mettre à jour les services Google Play sur l'émulateur, rien ne se passe. Le problème était que l' APK com.google.android.gms n'était pas compatible avec la version de la bibliothèque dans mon SDK Android.

J'ai installé ces fichiers "com.google.android.gms.apk", "com.android.vending.apk" sur mon émulateur et mon application Google Maps v2 fonctionnait bien. Aucune des autres étapes concernant / system / app n'était requise.

Adil
la source
1
ce sont les fichiers à installer: vending.apk et gms.apk
Adil
2

Cette application ne fonctionnera que si vous mettez à jour les services Google Play. Je l'ai essayé pendant si longtemps, mais je n'ai toujours pas eu la carte ... Seul un écran vide apparaît, même si j'ai modifié mon service Google Play indiqué par le commentaire ci-dessous.


Vérifiez le fichier manifeste de vos services de lecture et vérifiez le code de version du fichier APK com.google.android.gms. Dans la partie ci-dessous, il s'agit de "3136110". Téléchargez ces fichiers APK et installez-les à partir d'une invite DOS, mais avant l'installation, exécutez votre émulateur cible.

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

J'ai obtenu ces fichiers APK à partir de ce lien .

utilisateur
la source
2

J'ai résolu ces problèmes en procédant comme suit:

  • Dans l'émulateur:

    Vous devez utiliser la dernière API Google APIs(Google Inc.)-API Level 19 .

    Faites le reste des choses placées dans la capture d'écran elle-même.

    entrez la description de l'image ici

  • Clé API:

    Créez une nouvelle clé API et vérifiez attentivement la clé API Google Map et la clé SHA.

  • Services Google Play:

    Vous devez télécharger les derniers services Google Play com.android.vending-4.8.20.apk . Dans ce site, si les services Google Play ne fonctionnaient pas, vous pouvez trouver de nombreux sites sur Internet nomméscom.android.vending 4.8.20.apk .

    vous pouvez exécuter les services Google play à l'aide de l'invite de commande adb install com.android.vending 4.8.20.apk.

    Remarque: vous devez télécharger les derniers services Google Play, car la dernière version d'année en année sera mise à jour sur Internet.

    sortie :

    entrez la description de l'image ici

Steve
la source
1
@JJD Je suis édité, vérifiez-le, cela fonctionnera.Merci de l'avoir indiqué.
Steve
0

Après la mise à jour vers ADT 22.0.1, en raison des bibliothèques privées Android, le service Google Maps donnait une erreur et l'application s'est plantée. J'ai donc finalement trouvé la solution et cela a fonctionné pour moi.

Installez simplement la bibliothèque de services Google Play, puis accédez à google-play-service/libproject/google-play-services_libde https://www.dropbox.com/sh/2ok76ep7lmav0qf/9XVlv61D2b. Importez-le dans votre espace de travail. Nettoyez votre projet dans lequel vous souhaitez utiliser gogole-play-services-lib, puis reconstruisez-le et accédez au projet -> Propriétés -> Java BuildPath -> sélectionnez "Bibliothèques privées Android, dépendances Android, service google-play"

Dans Propriétés, accédez à Android, puis choisissez l'une des versions, puis choisissez ajouter et sélectionnez google-play-service-lib, puis appuyez sur appliquer et enfin sur OK.

Enfin, allez dans le projet -> Outils Android -> Bibliothèques de support Android. Acceptez la licence et après l'installation, exécutez votre projet.

Cela fonctionnera très bien.

Honey Shah
la source
0

Depuis Android SDK Manager, installez: Extras: services Google Play

Franck
la source
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'

cela fonctionne pour moi la version actuelle est 10.0.1

jagapathi
la source