Эмулятор Android Studio не поставляется с Play Store для API 23

92

Я выбрал этот эмулятор из последней версии Android Studio AVD.

Google API

Я выбрал последнюю версию Android API 23. Поскольку там написано «с API Google», я подумал, что он действительно будет включать все приложения Google, включая Play Store, чтобы я мог устанавливать приложения, такие как Facebook.

Я видел другие темы на SO, которые, похоже, сейчас устарели ( как установить приложение Google Play в эмуляторе Android Studio? ), Этот дает инструкции по установке приложений Google на основе универсальных пакетов, но он подходит только до Android 4.3 API 18: http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

Мне нужен API 23. Есть ли способ установить пакет Google Apps на эмулятор?

Кажется странным, что официальный эмулятор Android не входит в стандартную комплектацию всех приложений Google в первую очередь ... Это не очень хорошо поддерживает Google и может означать, что разработчикам придется покупать реальные устройства для разработки для API 23 ?

Саймон
источник
Спасибо, мисс Иветт. Я считаю важным получить ответ на этот вопрос для сообщества Android. Есть много разработчиков Android, не имеющих доступа к реальным устройствам Android, и мне интересно, как они собираются разрабатывать для Android, если им не предоставлен доступ ко всем инструментам.
Саймон
1
У меня недостаточно доверия, чтобы прокомментировать выше. Re: раздел только для чтения / системный, убедитесь, что вы передаете аргумент "-writable-system" при вызове emulator.exe. Например: START / B emulator.exe @ Nexus_7-2012_API_22 -no-boot-anim -writable-system
pjl
@pjl - спасибо за этот комментарий! Я добавил это к своему ответу.
Dev-iL
Google говорит, что они работают над добавлением поддержки Play Store в эмулятор. Между тем, вы можете выбрать один из нескольких обходных путей. Использование Amazon Appstore - это один из вариантов, но не единственный. Смотрите здесь .
unforgettableidSupportsMonica

Ответы:

56

Недавно мне пришлось сделать это на эмуляторе API 23, и я следовал этому руководству . Он работает с эмулятором API 23, так что у вас не должно возникнуть проблем.

Примечание: все заслуги принадлежат автору связанного сообщения в блоге (pyoor). Я просто выкладываю его сюда на случай, если ссылка по какой-либо причине оборвется.

....

Загрузите пакет GAPPS

Затем нам нужно загрузить соответствующий пакет Google Apps, который соответствует нашей версии Android AVD. В этом случае мы будем использовать пакет gapps-lp-20141109-signed.zip. Вы можете скачать этот файл из BasketBuild здесь .

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

Чтобы установить Google Play, нам нужно отправить следующие 4 APK на наш AVD (расположенный в ./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 ./

Отправьте APK-файлы в эмулятор

После извлечения наших APK давайте запустим наш AVD, используя следующую команду.

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

При первом создании AVD это может занять несколько минут. После запуска нам нужно перемонтировать системный раздел AVD для чтения / записи, чтобы мы могли отправить наши пакеты на устройство.

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

Затем вставьте APK в наш 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

Прибыль!

И, наконец, перезагрузите эмулятор с помощью следующих команд:

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

После перезапуска эмулятора мы должны увидеть, что пакет Google Play появится в панели запуска меню. После связывания учетной записи Google с этим AVD у нас теперь есть полностью рабочая версия Google Play, работающая под нашим эмулятором.

Энди Шепард
источник
29
Я получаю сообщение об ошибке "Файловая система только для чтения", но ни один из этих файлов apk не установлен.
wmac
6
К сожалению, BasketBuild больше не доступен. s.basketbuild.com указывает, что он не работает по крайней мере с 9/3, и ETA не должно увеличиваться. Порекомендуете ли вы другой источник приложений Google?
Чад Шульц
1
Если вы получили ошибку «Файловая система только для чтения», выполните команду: «adb remount». Затем попробуйте снова команды "adb push ...".
Shangwu
4
Все ссылки мертвы
Mooing Duck
1
любой, кто не может получить gapps: f.lomakuit.com/download/gapps-lp-20141109-signed.zip
Manny265,
53

Ниже приведен метод, который работал у меня на эмуляторах API 23-25 . Объяснение предоставляется для API 24, но работает почти идентично для других версий.

Кредиты : Джон Доу , zaidorx , pjl .

Теплый совет для читателей: просто просмотрите шаги, прежде чем следовать им, поскольку некоторые из них автоматизированы с помощью предоставленных скриптов.


  1. В диспетчере AVD студии Android (проверено на v2.2.3) создайте новый эмулятор с целью «Android 7.0 (Google API)»: Экран AVD после создания эмулятора.

  2. Загрузите последний пакет Open GApps для архитектуры эмулятора (CPU / ABI). В моем случае это было так x86_64, но это может быть что-то еще, в зависимости от вашего выбора изображения во время мастера создания устройства. Интересно, что архитектура кажется более важной, чем правильная версия Android (т.е. gapps для 6.0 также работают на эмуляторе 7.0).

  3. Извлеките .apkфайлы, используя следующие пути (относительно 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\
    

    Обратите внимание , что Open GAPPS использовать сжатие Lzip, который может быть открыт с помощью либо инструмент на веб - сайте Lzip 1 , 2 , или на Mac с помощью доморощенного: brew install lzip. Тогда например lzip -d gmscore-x86_64.tar.lz.

    Я предоставляю командный файл, который использует 7z.exeи автоматически lzip.exeизвлекает все необходимые файлы .apk(в 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
    

    Чтобы использовать это, сохраните сценарий в файле (например unzip_gapps.bat) и поместите все необходимое в одну папку, как показано ниже: Как это должно выглядеть ...

  4. Обновите suдвоичный файл, чтобы иметь возможность изменять права доступа к файлам, которые мы позже загрузим. Новый suдвоичный код может быть найден в SuperSU по Chainfire пакета «Recovery Flashable»zip . Получите zip-архив, распакуйте его куда-нибудь, создайте пакетный файл со следующим содержимым в той же папке и, наконец, запустите его:

    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. Поместите все .apkфайлы в одну папку и создайте пакетный файл с этим содержимым 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
    

    Обратите внимание, что путь E:\...\android-sdk\tools\emulator.exeдолжен быть изменен в соответствии с расположением Android SDK в вашей системе.

  6. Запустите указанный выше командный файл (после этого консоль должна выглядеть так):

    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. Когда эмулятор загрузится - закройте его, удалите виртуальное устройство, а затем создайте другое, используя тот же образ системы . Это устраняет неотвечающее приложение Play Store, «Сервисы Google Play остановлены» и аналогичные проблемы. Это работает , потому что в предыдущих шагах мы фактически изменили самое образ системы (обратите внимание на дату изменений на android-sdk\system-images\android-24\google_apis\x86_64\system.img). Это означает, что на каждом устройстве, созданном с этого момента с помощью образа системы, будут установлены gapps!

  8. Запустите новый AVD. Если загрузка занимает необычно много времени, закройте его и вместо этого запустите, используя:

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

    После запуска AVD вы увидите изображение ниже - обратите внимание на значок Play Store в углу!

Первая загрузка с установленным Play Store.


3 - Я не уверен, что все эти команды нужны, и, возможно, некоторые из них излишни ... похоже, работает - вот что важно. :)

Dev-iL
источник
2
Вместо файлов .xz Open Gapps, похоже, содержит файлы .lz (например, gsfcore-all.tar.lz). Я пробовал несколько инструментов, ни один из которых не может распаковать файлы .lz, чтобы я мог получить APK. Какие-либо предложения?
Чад Шульц
2
@Chad Schultz вот ссылка на инструмент download.savannah.gnu.org/releases/lzip, если вы используете Windows, загрузите «lzip-1.11-w32.zip» и используйте следующую команду, чтобы преобразовать его в файл .tar и использовать другой инструмент, чтобы наконец его извлечь.
f4b 08
1
@ Dev-iL PlayStore устанавливается на моем эмуляторе, но не открывается. Я использую системный образ Nexus 5 x86_64 API 23. Есть мысли?
ARK
3
Это сработало для меня на последнем эмуляторе 25 / 7.1. Единственное, что было странно, это то, /system/app/SdkSetup.apkчто не было в моем изображении. Большое спасибо, я сходил с ума, пытаясь решить эту проблему!
wilsonpage
1
Как именно «создать еще один, используя тот же образ системы»?
gavsiu
43

Теперь нет необходимости загружать какие-либо пакеты для выполнения каких-либо скриптов, чтобы получить Play Store на эмуляторе. Начиная с Android Studio 2.4, теперь вы можете создать AVD с предустановленным Play Store. В настоящее время он поддерживается только на AVD с системными образами Android 7.0 (API 24).

Официальный источник

AVD с Play Store

Примечание. Совместимые устройства обозначены в новом столбце Play Store.

Прерак Сола
источник
7
Примечание. Вам необходимо установить образ системы с надписью Target:, а Android 7.0 (Google Play)не только API Google. В настоящее время он доступен только для API 24, но не для API 25. После установки образа системы он появится на вкладке «Рекомендуемые», а не на вкладке «Изображения x86».
антуан
2
Android Studio 2.3.3 в Linux теперь поддерживает AVD в Play Store, но также стоит отметить, что в настоящее время Play Store, похоже, доступен только для целей x86, поэтому вам все равно придется использовать другой метод, если вы хотите получить Play Хранить на ARM AVD.
NullColaShip
Теперь есть изображения для API 25, 26 и 27 в дополнение к 24.
arekolek
25

Хотел прокомментировать последний ответ, но без входа в систему можно только ответить:

Чтобы избавиться от «ошибки только для чтения», просто остановите устройство сразу после его готовности. Мой сценарий выглядит следующим образом:

#!/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
Джон Доу
источник
1
Это помогло мне решить ошибку файловой системы только для чтения. так как я работаю в Windows, я просто проигнорировал первую строку скрипта и заменил вторую на этот "START / B / tools / emulator @ Nexus_6P_API_23 -no-boot-anim", сохранил его с расширением .bat и запустил из командной строки.
zaidorx
1
Это потрясающе, я просто удалил первые две строчки и запустил эмулятор самостоятельно, а затем запустил файл BAT ... работал как шарм
Im Rick James
поставьте adb root вначале, если у вас есть остановка adb shell stop: должна быть ошибка root.
nutella_eater
adb rootстрока должна быть добавлена ​​сразу после adb wait-for-deviceстроки, чтобы предотвратить Read-only file systemошибку.
efkan
1
Это сработало после того, как я добавил -writable-system в свою команду эмулятора, например, ~ / android-sdk / tools / emulator @ Nexus_5X_API_23 -no-boot-anim -writable-system
reassembler
3

Что вам нужно сделать, так это обновить config.iniфайл для устройства и повторно загрузить образ системы.

Обновите следующие значения в C:\Users\USER\.android\avd\DEVICE_ID\config.ini(в Windows) или ~/.android/avd/DEVICE_ID/config.ini(в Linux)

PlayStore.enabled = true
image.sysdir.1=system-images\android-27\google_apis_playstore\x86\
tag.display=Google Play
tag.id=google_apis_playstore

Затем повторно загрузите образ системы для устройства из Android Studio> Инструменты> AVD Manager.

Это все. Перезагрузите устройство, и у вас будет установлен Play Store.

На это также ответили здесь: Как установить приложение Google Play в эмуляторе Android Studio?

Амна
источник
3

Решено простым способом: вам нужно создать новый эмулятор, прежде чем открывать его в первый раз, выполните следующие 3 простых шага:

1- перейдите в «C: \ Users [пользователь] .android \ avd [папка вашего виртуального устройства]» откройте «config.ini» с помощью текстового редактора, такого как блокнот

2- изменить

«PlayStore.enabled = false» на «PlayStore.enabled = true»

3- изменить

"mage.sysdir.1 = system-images \ android-30 \ google_apis \ x86"

к

"image.sysdir.1 = system-images \ android-30 \ google_apis_playstore \ x86"

Шариф Яздиан
источник
Я сделал это, и эмулятор снова не
загрузился
На самом деле это сработало бы напрямую, если бы google_apis_playstoreизображение присутствовало, но в моем случае этого не было. Поэтому мне пришлось установить его после @Aamnahответа.
happy_san
@happy_san В первой строке я упомянул, что вам нужно создать новый эмулятор, и перед тем, как открывать его в первый раз, вы должны сделать то, что я сказал ...
Шариф Яздян,
да, я сначала создал эмулятор, и тот, у которого был значок Google Play в Android Studio. Но он не загрузил google_apis_playstoreизображение вместе с ним, иди, почему ..
happy_san
2

Вот сценарий, который я использовал в Linux для экземпляра Nexus 5 API 24 x86 БЕЗ GoogleApis.

#!/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

Этот сделал это за меня.

ВАЖНО: чтобы предотвратить сбой приложения, не забудьте предоставить разрешения на определение местоположения сервисов Google Play.

Конфигурация-> Приложения-> Конфигурация (значок шестеренки) -> Разрешения приложений-> Местоположение -> (Верхнее правое меню) -> Показать систему-> Включить сервисы Google Play

Ричард
источник
2

Перейдите на http://opengapps.org/ и загрузите пико-версию своей платформы и версию Android. Разархивируйте загруженную папку и получите
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk.

Затем найдите свой emulator.exe. Вы, вероятно, найдете его в
C: \ Users \ <YOUR_USER_NAME> \ AppData \ Local \ Android \ sdk \ tools

Выполните команду:
emulator -avd <YOUR_EMULATOR'S_NAME> -netdelay none -netspeed full -no-boot-anim -writable-system

Примечание. Используйте -writable-system, чтобы запустить эмулятор с доступным для записи образом системы.

Затем
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

Затем перезагрузите эмулятор
adb shell stop
adb shell start

Чтобы проверить запуск,
adb shell pm list packages, и вы найдете пакет com.google.android.gms для Google

Сайни Арун
источник
1

На данный момент установка apks в /systemкаталог, похоже, работает с помощью adb pushкоманды.

Некоторая скрытая служба автоматически перемонтировала /systemкаталог в read-onlyрежиме.

В любом случае мне удалось установить магазин Play на обычную виртуальную машину (т.е. виртуальную машину, отличную от Google-Api), просто подключив system.imgфайл из моей ОС и скопировав файлы.

# 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

Файлы APK можно загрузить с любого реального устройства Android, на котором запущены Google Apps, с помощью adb pullкоманды

[Чтобы получить точный путь к apks, мы можем использовать команду pm list packages -fвнутри оболочки adb]

Harish2704
источник
Я не уверен, что там работает какая-то "таинственная" служба ... скорее, в эмуляторе (или образах системы) была ошибка, которая, кажется, была исправлена, что позволило нескольким копиям apks существовать в /systemкаталоге. Я заметил, что перемещение каждого из apks в правильную папку не приводит к ошибкам записи. Я обновил свой ответ - не могли бы вы попробовать, работает ли он для вас сейчас?
Dev-iL
Я сталкиваюсь с той же проблемой, не могу передать файловую систему только для чтения при нажатии apks, я думаю, что единственный способ - это отредактировать изображение системы Android эмулятора, а затем как редактировать изображение Android из Windows 8, спасибо. Мне нужно установить последнюю версию сервиса Google Play и игру Google Play на эмуляторе Android 6.0.
noname.cs 08
2
Я установил linux и скопировал apks в 6.0 system.img с помощью API Google, но когда я создал новый эмулятор, у него не было службы Google Play или магазина Google Play. Я попробую еще раз, не используя API Google.
noname.cs 09
0

Просто хочу добавить еще одно решение для пользователей React Native, которым просто нужно приложение Expo.

  1. Установите приложение Expo
  2. Открой свой проект
  3. Нажмите «Устройство» -> «Открыть на Android» - на этом этапе Expo установит приложение expo для Android, и вы сможете его открыть.
Ченоп
источник