Емулятор 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
У мене недостатньо кредитів, щоб коментувати вище. Щодо: розділ лише для читання / системний розділ, переконайтесь, що ви передаєте аргумент "-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, який відповідає нашій версії AVD для Android. У цьому випадку ми будемо використовувати пакет '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
Я отримую помилку "ReadOnly file system", і жоден з цих файлів apk не встановлений.
wmac

6
На жаль, BasketBuild, здається, більше недоступний. s.basketbuild.com вказує, що він знизився щонайменше з 9/3, і не очікується збільшення ETA. Чи є інше джерело, яке ви рекомендуєте для програм Google?
Чад Шульц,

1
Якщо ви отримали помилку "Файлова система лише для читання", запустіть команду: "adb remount". Потім спробуйте ще раз команди "adb push ...".
Shangwu

4
Всі посилання мертві
Mooing Duck

1
усі, хто не може отримати розриви: f.lomakuit.com/download/gapps-lp-20141109-signed.zip
Manny265

51

Нижче наведено метод, який працював у мене на емуляторах API 23-25 . Пояснення наведено для API 24, але майже однаково працює для інших версій.

Подяки : Джон Доу , zaidorx , pjl .

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


  1. У менеджері AVD для Android-студії (протестовано на v2.2.3) створіть новий емулятор із ціллю "Android 7.0 (API Google)": Екран AVD після створення емулятора.

  2. Завантажте останній пакет Open GApps для архітектури емулятора (CPU / ABI). У моєму випадку це було x86_64, але це може бути щось інше, залежно від вашого вибору зображення під час роботи майстра створення пристрою. Цікаво, що архітектура видається важливішою за правильну версію Android (тобто прогалини для 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витягує всі необхідні .apks (у 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). Це означає, що на кожному пристрої, створеному відтепер із зображенням системи, будуть встановлені прогалини!

  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 - Я не впевнений, що всі ці команди потрібні, і, можливо, деякі з них надмірні ... здається, це працює - саме це має значення. :)


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

1
@ Dev-iL PlayStore встановлюється на моєму емуляторі, але він не відкривається. Я використовую x86_64 API 23 Системний образ Nexus 5. Будь-які думки?
ARK

3
Це працювало для мене на останньому емуляторі 25 / 7.1. Дивним було лише те, що /system/app/SdkSetup.apkне існувало в моєму образі. Велике спасибі, збожеволів, намагаючись це розробити!
wilsonpage

1
Як саме "створити ще один, використовуючи той самий образ системи"?
gavsiu

42

Тепер немає необхідності завантажувати будь-які пакети для виконання будь-яких сценаріїв, щоб отримати Play Store на емуляторі. Починаючи з Android Studio 2.4, тепер ви можете створити AVD, на якому попередньо встановлений Play Store. На даний момент він підтримується лише на AVD, на яких встановлено системні образи Android 7.0 (API 24).

Офіційне джерело

AVD із Play Store

Примітка. Сумісні пристрої позначаються новим стовпцем Play Store.


6
Примітка: вам потрібно встановити системний образ із написом Target:, а Android 7.0 (Google Play)не лише API Google. На даний момент він доступний лише для API 24, а не API 25. Після встановлення системного образу він з’явиться на вкладці Рекомендовано, а не на вкладці Зображення x86.
antoine

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
Це допоможе мені вирішити помилку лише для читання файлової системи. оскільки я працюю у вікнах, я просто проігнорував перший рядок сценарію і замінив другий на цей "START / B / tools / emulator @ Nexus_6P_API_23 -no-boot-anim", зберег його з розширенням .bat і запустив з командного рядка.
zaidorx

1
Це чудово, я просто видалив перші два рядки і запустив емулятор самостійно, а потім запустив файл BAT ... працював як шарм
Im Rick James

поставте корінь adb на початку, якщо у вас є зупинка зупинки оболонки adb: має бути помилка кореня.
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
повторне збирання

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 stop stop adb shell start

Щоб перевірити запуск,
adb shell pm список пакетів, і ви знайдете com.google.android.gms пакет для google


2

Потрібно оновити 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?


2

Вирішено просто: Ви повинні створити новий емулятор, перш ніж його вперше відкрити, виконайте ці 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"


1

На сьогодні встановлення apks в /systemкаталог, схоже, працює за допомогою adb pushкоманди.

Якась прихована служба автоматично перемонтовувала /systemкаталог уread-only режимі.

У будь-який спосіб я зміг встановити магазин Play на звичайну віртуальну машину (тобто, не віртуальну машину 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]


Я не впевнений, що працює якась "таємнича" послуга .. швидше, в емуляторі (або в системних образах) була помилка, яка, здається, була виправлена, що дозволило декілька копій apks існувати в /systemкаталозі. Я помітив, що переміщення кожного з apks у правильну папку не призводить до помилок при записі. Я оновив свою відповідь - не могли б ви спробувати, якщо це зараз у вас працює?
Dev-iL

Я стикаюся з тією ж проблемою, не можу пройти файлову систему лише для читання, коли натискаю apks, я думаю, що єдиним способом є редагування емулятора зображення системи Android, а потім, як редагувати зображення Android з Windows 8, дякую. Мені потрібно встановити найновіший сервіс Google Play та гру Google Play на емуляторі Android 6.0.
noname.cs

2
Я встановив linux і скопіював apk до 6.0 system.img за допомогою google apis, але коли я створив новий емулятор, у ньому не було служби Google Play або Google Play Store. Я спробую ще раз з не-google apis rom.
noname.cs

0

Просто хочу додати ще одне рішення для користувачів React Native, яким просто потрібна програма Expo.

  1. Встановіть Expo додаток
  2. Відкрити ваш проект
  3. Клацніть Пристрій -> Відкрити на Android - На цьому етапі Expo встановить програму expo android, і ви зможете її відкрити.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.