Эмулятор Android Studio не поставляется с Play Store для API 23
Я выбрал этот эмулятор из новейшей версии Android Studio AVD.
![API Google]()
Я выбрал последнюю версию API Android 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 API 23. Есть ли способ установить пакет Google Apps на эмулятор?
Кажется странным, что официальный эмулятор Android не входит в стандартную комплектацию всех приложений Google в первую очередь... Это не похоже на поддержку Google, и потенциальным средним разработчикам придется покупать фактические устройства для разработки для API 23?
Ответы
Ответ 1
Мне нужно было сделать это недавно в эмуляторе API 23 и после это руководство. Он работает для эмулятора API 23, поэтому у вас не должно быть проблем.
Примечание. Все отзывы принадлежат автору связанного сообщения в блоге (pyoor). Я просто размещаю его здесь, если ссылка по какой-либо причине разрывается.
....
Загрузить пакет GAPPS
Затем нам нужно вынуть соответствующий пакет Google Apps, соответствующий нашей версии Android AVD. В этом случае хорошо используйте пакет "gapps-lp-20141109-signed.zip". Вы можете скачать этот файл из BasketBuild здесь.
[[email protected]]$ 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
[[email protected]]$ 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, используя следующую команду.
[[email protected] tools]$ ./emulator @<YOUR_DEVICE_NAME> -no-boot-anim
Это может занять несколько минут с момента создания AVD. После запуска нам необходимо перемонтировать системный раздел AVD как чтение/запись, чтобы мы могли нажимать наши пакеты на устройство.
[[email protected]]$ cd ~/android-sdk/platform-tools/
[[email protected] platform-tools]$ ./adb remount
Затем нажмите APK на наш AVD:
[[email protected] platform-tools]$ ./adb push GmsCore.apk /system/priv-app/
[[email protected] platform-tools]$ ./adb push GoogleServicesFramework.apk /system/priv-app/
[[email protected] platform-tools]$ ./adb push GoogleLoginService.apk /system/priv-app/
[[email protected] platform-tools]$ ./adb push Phonesky.apk /system/priv-app
Profit!
И, наконец, перезагрузите эмулятор с помощью следующих команд:
[[email protected] platform-tools]$ ./adb shell stop && ./adb shell start
Как только эмулятор перезагрузится, мы увидим, что пакет Google Play появится в панели запуска. После связывания аккаунта Google с этим AVD теперь у нас есть полностью работающая версия Google Play, работающая под нашим эмулятором.
Ответ 2
Ниже приведен метод, который работал у меня на эмуляторах API 23-25 . Объяснение дается для API 24, но почти одинаково работает для других версий.
Кредиты: Джон Доу, zaidorx, pjl.
Теплый совет для читателей: просто перейдите по шагам, прежде чем следовать им, поскольку некоторые из них автоматизированы с помощью предоставленных скриптов.
-
В AVD-менеджере студии Android (проверенном на версии 2.2.3) создайте новый эмулятор с целевым "Android 7.0 (Google API)":
![Экран AVD после создания эмулятора.]()
-
Загрузите последний Открыть пакет GApps для архитектуры эмулятора (CPU/ABI). В моем случае это было x86_64
, но это может быть что-то еще в зависимости от вашего выбора изображения во время создания мастера создания устройства. Интересно, что архитектура кажется более важной, чем правильная версия Android (т.е. Gapps для 6.0 также работает с эмулятором 7.0).
-
Извлеките файлы .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
Чтобы использовать это, сохраните script в файле (например, unzip_gapps.bat
) и поместите все значение в одну папку, как показано ниже:
![Как это должно выглядеть...]()
-
Обновите двоичный файл su
, чтобы иметь возможность изменять разрешения файлов, которые мы будем загружать позже. Новый новый двоичный файл su
можно найти в SuperSU пакетом Chainfire "Восстановление 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
-
Поместите все файлы .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 в вашей системе.
-
Выполните вышеуказанный командный файл (консоль должна выглядеть так далее):
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
-
Когда эмулятор загружается - закройте его, удалите виртуальное устройство, а затем создайте еще один, используя тот же системный образ. Это исправляет невосприимчивое приложение Play Store, "Службы Google Play прекратили" и аналогичные проблемы. Это работает, потому что на предыдущих этапах мы фактически модифицировали сам образ системы (посмотрите на дату, измененную на android-sdk\system-images\android-24\google_apis\x86_64\system.img
). Это означает, что все устройства, созданные с этого момента вместе с системным изображением, будут установлены gapps!
-
Запустите новый 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 - Я не уверен, что все эти команды необходимы, и, возможно, некоторые из них слишком переполнены... похоже, что это работает - что и есть.:)
Ответ 3
Теперь нет необходимости загружать на стороне какие-либо пакеты для выполнения любых скриптов, чтобы получить Play Store на эмуляторе. Начиная с Android Studio 2.4 теперь вы можете создать AVD, на котором установлен Play Store. В настоящее время он поддерживается только на AVD, работающих под управлением Android 7.0 (API 24).
Официальный источник
![AVD с Play Store]()
Примечание. Совместимые устройства обозначаются новым столбцом Play Store.
Ответ 4
Хотелось прокомментировать последний ответ, но без логина его можно было только ответить:
Чтобы избавиться от "ошибки только для чтения", просто остановите устройство сразу после его готовности. Мой script выглядит следующим образом:
#!/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
Ответ 5
Перейдите в http://opengapps.org/ и загрузите версию pico вашей платформы и версии Android. Разархивируйте загруженную папку, чтобы получить
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk
Затем найдите файл emulator.exe. Вероятно, вы найдете его в
<сильные > C:\Users\<your_user_name > \AppData\Local\Android\SDK\инструменты
Запустите команду:
эмулятор -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 > /Система/собств-приложение
adb push < PATH_TO GoogleServicesFramework.apk > /Система/собств-приложение
adb push < PATH_TO GoogleLoginService.apk > /Система/собств-приложение
adb push < PATH_TO Phonesky.apk > /Система/собств-приложение
Затем перезагрузите эмулятор
остановка оболочки adb
начало работы adb
Чтобы проверить запуск,
пакеты списка объявлений adb shell, и вы найдете com.google.android.gms пакет для google
Ответ 6
На данный момент установка apks в каталог /system
работает с использованием команды adb push
.
Некоторая скрытая служба автоматически перемонтировала каталог /system
в режиме read-only
.
В любом случае мне удалось установить Play Store в обычную виртуальную машину (т.е. виртуальную машину, отличную от 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]
Ответ 7
Здесь script я используется для 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.
Конфигурация- > Приложения- > Конфигурация (значок Gear) → Разрешения на доступ- > Местоположение → (Вверху справа) → Показать систему- > Включить службы Google Play
Ответ 8
Просто хочу добавить еще одно решение для реальных пользователей React, которым просто нужно приложение Expo.
- Установите Expo приложение
- Откройте проект
- Нажмите "Устройство" → "Открыть на Android". На этом этапе Expo установит приложение Android для экспонирования, и вы сможете его открыть.