web-dev-qa-db-fra.com

L'émulateur Android Studio n'est pas fourni avec Play Store pour API 23

J'ai sélectionné cet émulateur dans la dernière version d'Android Studio AVD.

 Google API

J'ai sélectionné la dernière version d'Android API 23. Comme il est indiqué "avec les API Google", j'ai pensé qu'il inclurait en fait toutes les applications Google, y compris Play Store, afin que je puisse installer des applications comme Facebook.

J'ai vu d'autres sujets sur SO qui semblent être obsolètes à présent ( Comment installer l'application Google Play dans l'émulateur Android Studio? ) passe à l'API Android 4.3 18: http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

Je voudrais celui pour l'API 23. Est-il possible d'installer le package Google Apps sur l'émulateur? 

Il semble étrange que l'émulateur Android officiel ne vienne pas en standard avec toutes les applications Google. Cela ne semble pas très favorable à Google et cela voudrait dire que les développeurs devront acheter des appareils réels pour développer des API 23 ? 

82
Simon

J'ai eu à faire cela récemment sur l'émulateur API 23 et j'ai suivi ce guide . Cela fonctionne pour l'émulateur API 23, vous ne devriez donc pas avoir de problème.

Remarque: tout le mérite revient à l'auteur de l'article de blog lié (pyoor). Je ne fais que l'afficher ici au cas où le lien serait rompu pour une raison quelconque.

....

Télécharger le package GAPPS

Ensuite, nous devons extraire le package Google Apps approprié qui correspond à notre version Android AVD. Dans ce cas, nous utiliserons le package 'gapps-lp-20141109-signed.Zip'. Vous pouvez télécharger ce fichier depuis BasketBuild ici .

[pyoor@localhost]$ md5sum gapps-lp-20141109-signed.Zip
367ce76d6b7772c92810720b8b0c931e gapps-lp-20141109-signed.Zip

Pour installer Google Play, nous devons envoyer les 4 fichiers APK suivants à notre AVD (situé dans ./system/priv-app/):

GmsCore.apk, GoogleServicesFramework.apk, GoogleLoginService.apk, Phonesky.apk

[pyoor@localhost]$ unzip -j gapps-lp-20141109-signed.Zip \
system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk \
system/priv-app/GoogleLoginService/GoogleLoginService.apk \
system/priv-app/Phonesky/Phonesky.apk \
system/priv-app/GmsCore/GmsCore.apk -d ./

Push APKs vers l'émulateur

Avec nos fichiers APK extraits, lançons notre AVD en utilisant la commande suivante.

[pyoor@localhost tools]$ ./emulator @<YOUR_DEVICE_NAME> -no-boot-anim

Cela peut prendre plusieurs minutes la première fois que l’AVD est créé. Une fois démarré, nous devons remonter la partition système des AVD en lecture/écriture afin de pouvoir envoyer nos packages sur le périphérique.

[pyoor@localhost]$ cd ~/Android-sdk/platform-tools/
[pyoor@localhost platform-tools]$ ./adb remount

Ensuite, envoyez les fichiers APK à notre AVD:

[pyoor@localhost platform-tools]$ ./adb Push GmsCore.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb Push GoogleServicesFramework.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb Push GoogleLoginService.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb Push Phonesky.apk /system/priv-app

Profit!

Et enfin, redémarrez l’émualateur à l’aide des commandes suivantes:

[pyoor@localhost platform-tools]$ ./adb Shell stop && ./adb Shell start

Une fois que l'émulateur a redémarré, le package Google Play devrait apparaître dans le lanceur de menus. Après avoir associé un compte Google à cet AVD, nous disposons maintenant d'une version entièrement fonctionnelle de Google Play fonctionnant sous notre émulateur.

50
Andy Shephard

Voici la méthode qui a fonctionné pour moi sur les émulateurs API 23-25 ​​. L'explication est fournie pour l'API 24 mais fonctionne presque à l'identique pour les autres versions.

Crédits: Jon Doe , zaidorx , pjl .

Conseils chaleureux aux lecteurs: veuillez suivre les étapes avant de les suivre, car certaines sont automatisées à l'aide des scripts fournis.


  1. Dans le gestionnaire AVD du studio Android (testé sur la version 2.2.3), créez un nouvel émulateur avec la cible "Android 7.0 (Google APIs)":  AVD screen after creating the emulator.

  2. Téléchargez le dernier package Open GApps pour l'architecture de l'émulateur (CPU/ABI). Dans mon cas, il s'agissait de x86_64, mais cela peut être différent en fonction de votre choix d'image lors de l'assistant de création de périphérique. Fait intéressant, l’architecture semble plus importante que la version Android correcte (c’est-à-dire que gapps for 6.0 fonctionne également sur un émulateur 7.0). 

  3. Extrayez les fichiers .apk en utilisant l’un des chemins suivants (par rapport à open_gapps-x86_64-7.0-pico-201#####.Zip):

    .Zip\Core\gmscore-x86_64.tar.lz\gmscore-x86_64\nodpi\priv-app\PrebuiltGmsCore\
    .Zip\Core\gsfcore-all.tar.lz\gsfcore-all\nodpi\priv-app\GoogleServicesFramework\
    .Zip\Core\gsflogin-all.tar.lz\gsflogin-all\nodpi\priv-app\GoogleLoginService\
    .Zip\Core\vending-all.tar.lz\vending-all\nodpi\priv-app\Phonesky\
    

    Notez que Open GApps utilise la compression Lzip, qui peut être ouverte à l'aide de l'outil disponible sur le site Web Lzip.1 , 2, ou sur Mac en utilisant homebrew: brew install lzip. Alors par exemple lzip -d gmscore-x86_64.tar.lz

    Je fournis un fichier batch qui utilise 7z.exe et lzip.exe pour extraire automatiquement tous les .apks requis (sous Windows):

    @echo off
    echo.
    echo #################################
    echo Extracting Gapps...
    echo #################################
    7z x -y open_gapps-*.Zip -oGAPPS
    
    echo Extracting Lzips...
    lzip -d GAPPS\Core\gmscore-x86_64.tar.lz
    lzip -d GAPPS\Core\gsfcore-all.tar.lz
    lzip -d GAPPS\Core\gsflogin-all.tar.lz
    lzip -d GAPPS\Core\vending-all.tar.lz
    
    move GAPPS\Core\*.tar
    
    echo. 
    echo #################################
    echo Extracting tars...
    echo #################################
    
    7z e -y -r *.tar *.apk
    
    echo.
    echo #################################
    echo Cleaning up...
    echo #################################
    rmdir /S /Q GAPPS
    del *.tar
    
    echo.
    echo #################################
    echo All done! Press any key to close.
    echo #################################
    pause>nul
    

    Pour utiliser cela, enregistrez le script dans un fichier (par exemple, unzip_gapps.bat) et mettez tout ce qui est pertinent dans un seul dossier, comme indiqué ci-dessous:  What it should look like...

  4. Mettez à jour le binaire su pour pouvoir modifier les autorisations des fichiers que nous téléchargerons plus tard. Un nouveau binaire su peut être trouvé dans le package SuperSU de Chainfire"Récupération flashable" Zip . Obtenez le fichier Zip, extrayez-le quelque part, créez le fichier de commandes avec le contenu suivant dans le même dossier, puis exécutez-le:

    adb root
    adb remount
    
    adb Push eu.chainfire.supersu_2.78.apk /system/app/
    adb Push x64/su /system/xbin/su
    adb Shell chmod 755 /system/xbin/su
    
    adb Shell ln -s /system/xbin/su /system/bin/su
    adb Shell "su --daemon &"
    adb Shell rm /system/app/SdkSetup.apk
    
  5. Placez tous les fichiers .apk dans un seul dossier et créez un fichier de commandes avec ce contenu.3:

    START /B E:\...\Android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system
    adb wait-for-device
    adb root
    adb Shell stop
    adb remount
    adb Push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore
    adb Push GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework
    adb Push GoogleLoginService.apk /system/priv-app/GoogleLoginService
    adb Push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
    adb Shell su root "chmod 777 /system/priv-app/**"
    adb Shell su root "chmod 777 /system/priv-app/PrebuiltGmsCore/*"
    adb Shell su root "chmod 777 /system/priv-app/GoogleServicesFramework/*"
    adb Shell su root "chmod 777 /system/priv-app/GoogleLoginService/*"
    adb Shell su root "chmod 777 /system/priv-app/Phonesky/*"
    adb Shell start
    

    Notez que le chemin E:\...\Android-sdk\tools\emulator.exe doit être modifié en fonction de l'emplacement du SDK Android sur votre système.

  6. Exécutez le fichier de commandes ci-dessus (la console devrait ressembler à ceci par la suite):

    O:\123>START /B E:\...\Android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system
    
    O:\123>adb wait-for-device
    Hax is enabled
    Hax ram_size 0x60000000
    HAX is working and emulator runs in fast virt mode.
    emulator: Listening for console connections on port: 5554
    emulator: Serial number of this emulator (for ADB): emulator-5554
    
    O:\123>adb root
    
    O:\123>adb Shell stop
    
    O:\123>adb remount
    remount succeeded
    
    O:\123>adb Push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/
    [100%] /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
    
    O:\123>adb Push GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework/
    [100%] /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
    
    O:\123>adb Push GoogleLoginService.apk /system/priv-app/GoogleLoginService/
    [100%] /system/priv-app/GoogleLoginService/GoogleLoginService.apk
    
    O:\123>adb Push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
    [100%] /system/priv-app/Phonesky/Phonesky.apk
    
    O:\123>adb Shell su root "chmod 777 /system/priv-app/**"
    
    O:\123>adb Shell su root "chmod 777 /system/priv-app/PrebuiltGmsCore/*"
    
    O:\123>adb Shell su root "chmod 777 /system/priv-app/GoogleServicesFramework/*"
    
    O:\123>adb Shell su root "chmod 777 /system/priv-app/GoogleLoginService/*"
    
    O:\123>adb Shell su root "chmod 777 /system/priv-app/Phonesky/*"
    
    O:\123>adb Shell start
    
  7. Lorsque l'émulateur se charge - fermez-le, supprimez le périphérique virtuel, puis créez-en un autre en utilisant la même image système. Cela corrige l'application Play Store qui ne répond pas, "Les services Google Play s'est arrêtée" et des problèmes similaires. Cela fonctionne car dans les étapes précédentes nous avons en fait modifié l'image système elle-même (jetez un coup d'œil à la Date de modification sur Android-sdk\system-images\Android-24\google_apis\x86_64\system.img). Cela signifie que gapps sera installé sur tous les appareils créés à partir de cette image système!

  8. Démarrer le nouveau AVD. Si le chargement est long, fermez-le et démarrez-le à l'aide de:

    START /B E:\...\Android-sdk\tools\emulator.exe @Nexus_6_API_24
    adb wait-for-device
    adb Shell "su --daemon &"
    

    Après le démarrage de l'AVD, vous verrez l'image ci-dessous - remarquez l'icône Play Store dans le coin!

 First boot with Play Store installed.


3 - Je ne suis pas sûr que toutes ces commandes soient nécessaires, et certaines d'entre elles sont peut-être excessives ... cela semble fonctionner - c'est ce qui compte. :)

47
Dev-iL

Désormais, il n’est plus nécessaire de charger latéralement des packages d’exécution de scripts pour obtenir le Play Store sur l’émulateur. Depuis Android Studio 2.4, vous pouvez maintenant créer un fichier AVD sur lequel Play Store est pré-installé. Actuellement, il n'est pris en charge que sur les AVD exécutant des images système Android 7.0 (API 24).

Source officielle

 AVD with Play Store

Remarque: Les appareils compatibles sont signalés par la nouvelle colonne Play Store.

37
Prerak Sola

Je voulais commenter la dernière réponse, mais sans login, il est seulement possible de répondre:

Pour vous débarrasser de "l'erreur de lecture seule", arrêtez simplement l'appareil dès qu'il est prêt. Mon script se présente comme suit:

#!/bin/bash 
~/bin/AndroidSdk/tools/emulator @Nexus_6P_API_23 -no-boot-anim &
adb wait-for-device
adb Shell stop
adb remount
adb Push GmsCore.apk /system/priv-app
adb Push GoogleServicesFramework.apk /system/priv-app
adb Push GoogleLoginService.apk /system/priv-app
adb Push Phonesky.apk /system/priv-app
adb Shell start
23
Jon Doe

Allez sur http://opengapps.org/ et téléchargez la version pico de votre plate-forme et la version Android. Décompressez le dossier téléchargé pour obtenir
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk

Ensuite, localisez votre emulator.exe. Vous le trouverez probablement dans
C:\Utilisateurs\<VOTRE_NOM_USER>\AppData\Local\Android\sdk\outils

Exécutez la commande:
emulator -avd <YOUR_EMULATOR'S_NAME> -netdelay none -netspeed full -no-boot-anim -writable-system

Remarque: Utilisez -writable-system pour démarrer votre émulateur avec une image système inscriptible.

Ensuite,
adb root
adb remount
adb Push <PATH_TO GmsCore.apk>/system/priv-app
adb Push <PATH_TO GoogleServicesFramework.apk>/system/priv-app}
adb Push <PATH_TO GoogleLoginService.apk>/system/priv-app
adb Push <PATH_TO Phonesky.apk>/system/priv-app

Ensuite, redémarrez l'émulateur
arrêt du shell adb
début du shell adb

Pour vérifier l'exécution,
packages de liste pm du shell adb et vous trouverez le package com.google.Android.gms pour Google

2
Saini Arun

À partir de maintenant, l'installation des apks dans le répertoire /system semble fonctionner avec la commande adb Push

Certains services cachés remontaient automatiquement le répertoire /system en mode read-only.

De toute façon, j'ai pu installer le Play Store sur une machine virtuelle normale (c'est-à-dire une machine virtuelle non Google Api) en montant simplement le fichier system.img à partir de mon système d'exploitation et en copiant ces fichiers.

# To be executed as root user in your Unix based OS
mkdir sys_temp
mount $SDK_HOME/system-images/Android-23/default/x86/system.img sys_temp -o loop
cp Phonesky.apk GmsCore.apk GoogleLoginService.apk GoogleServicesFramework.apk ./sys_temp/priv-app/
umount sys_temp
rmdir sys_temp

Les fichiers APK peuvent être extraits de tout appareil Android exécutant Google Apps à l'aide de la commande adb pull

[Pour obtenir le chemin exact des apks, nous pouvons utiliser la commande pm list packages -f dans le shell adb]

1
harish2704

Voici le script que j'ai utilisé sur Linux pour une instance API Nexus 5 24 x86SANSGoogleApis.

#!/bin/sh

~/Android/Sdk/tools/emulator @A24x86 -no-boot-anim -writable-system & #where A24x86 is the name i gave to my instance
~/Android/Sdk/platform-tools/adb wait-for-device
~/Android/Sdk/platform-tools/adb root
~/Android/Sdk/platform-tools/adb Shell stop
~/Android/Sdk/platform-tools/adb remount
~/Android/Sdk/platform-tools/adb Push ~/gapps/PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
~/Android/Sdk/platform-tools/adb Push ~/gapps/GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
~/Android/Sdk/platform-tools/adb Push ~/gapps/GoogleLoginService.apk /system/priv-app/GoogleLoginService/GoogleLoginService.apk
~/Android/Sdk/platform-tools/adb Push ~/gapps/Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/PrebuiltGmsCore /system/priv-app/GoogleServicesFramework"
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/GoogleLoginService /system/priv-app/Phonesky"
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk"
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk"
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/GoogleLoginService/GoogleLoginService.apk"
~/Android/Sdk/platform-tools/adb Shell "chmod 777 /system/priv-app/Phonesky/Phonesky.apk"
~/Android/Sdk/platform-tools/adb Shell start

Celui-ci l'a fait pour moi.

IMPORTANT: pour éviter le blocage de l'application, n'oubliez pas d'octroyer des autorisations de localisation pour les services Google Play. 

Configuration-> Applications-> Config (icône d'engrenage) -> Autorisations d'application -> Emplacement -> (Menu en haut à droite) -> Afficher le système-> Activer les services Google Play

1
Richard

Je veux juste ajouter une autre solution pour les utilisateurs natifs de React qui ont juste besoin de l'application Expo.

  1. Installez le Expo app
  2. Ouvrez votre projet
  3. Cliquez sur Périphérique -> Ouvrir sur Android - Dans cette étape, Expo installera l'application Android expo et vous pourrez l'ouvrir.
0
chenop