Ставим Google Play Store на виртуальный девайс с Jelly Bean (API 16)

    Меня всегда смущали циркулирующие по интернетам способы установки маркета: что-то откуда-то качать, запускать какие-то скрипты. Всё можно сделать гораздо проще и безопаснее.

    Сразу предупрежу, что на API 15 описанный способ не работает, там маркет приложения не скачивает, хотя и ставится.

    Сначала краткое описание процедуры:

    • создаём виртуальный девайс на основе Google API образа;
    • запускаем эмулятор девайса шаманским образом;
    • удаляем «лишние» пакеты;
    • достаём пакет с маркетом из имеющегося телефона через USB-кабель;
    • закачиваем пакет с маркетом;
    • финальное шаманство.


    Все происходит в линуксе, но в других операционках всё абсолютно так же.

    Для начала нужно обновить SDK Tools и Platform Tools до последней версии, чтобы в списке доступных платформ появились образы с API 16.

    Создаём виртуальный девайс на основе Google API

    Выбираем в поле Target значение Google APIs (Google Inc.) — API Level 16. В секцию Hardware набиваем нужные элементы.



    Зачем на основе Google API? А всё просто — в этом образе уже есть нужные для работы Play Store пакеты (google services framework, например) и их не нужно где-то искать и шаманскими путями устанавливать.

    Запускаем эмулятор девайса шаманским образом

    Запускаем получившийся образ (тут уже начинается шаманство; предполагаем здесь и далее, что SDK установлен в каталоге ~/android/android-sdk-linux; виртуалка называется test-4.1)

    % ~/android/android-sdk-linux/tools/emulator -avd test-4.1 -partition-size 250 -no-snapstorage


    Эта команда запускает виртуальный девайс, у которого размер системного раздела увеличен до 250 МБ, если этого не делать, то пустого места на разделе совсем не будет.

    Теперь перемонтируем системный раздел для записи и заодно убеждаемся, что перемонтировался:

    % ~/android/android-sdk-linux/platform-tools/adb -e remount
    remount succeeded
    % adb -e shell mount|grep /system   
    /dev/block/mtdblock0 /system yaffs2 rw 0 0


    Я везде использую аргумент -e при вызове adb для того, чтобы запросы шли сразу на эмулируемый девайс.

    Удаляем «лишние» пакеты

    По умолчанию на виртуальном девайсе находится несколько несколько вредных пакетов, мешающих нормальной работе, в данном случае это LicenseChecker.apk и SdkSetup.apk, удалим их:

    % adb -e shell rm /system/app/SdkSetup.apk /system/app/LicenseChecker.apk


    Достаём пакет с маркетом из имеющегося телефона через USB-кабель

    Теперь нужно достать пакет с маркетом, для этого сгодится любой android-телефон, где этот маркет установлен. Включаем на телефоне отладку через USB, подключаем телефон кабелем к компьютеру и начинаем шаманство. Сначала нужно найти, где находится пакет с маркетом, это просто:

    % adb -d shell pm list packages -f | grep vending
    package:/data/app/com.android.vending-1.apk=com.android.vending


    Вот он, родимый: /data/app/com.android.vending-1.apk. Выкачиваем его в текущий каталог (ключ -d используется для обозначения реального устройства, а не эмулятора, это удобно, не нужно id-девайса указывать при каждом вызове):

    % adb -d pull /data/app/com.android.vending-1.apk .
    7563 KB/s (4000309 bytes in 0.516s)


    Этот способ должен работать на любом, даже не рутованном телефоне. И, да, таким путём можно извлекать любые пакеты с телефона.

    Закачиваем пакет с маркетом

    Закачиваем apk-пакет на телефон:

    % adb -e push com.android.vending-1.apk /system/app
    3353 KB/s (4000309 bytes in 1.164s)


    Финальное шаманство

    Пакет на виртуальный девайс залит, осталось теперь сделать так, чтобы при следующем запуске он не слетел. Это тоже просто: эмулятор создаёт копию системного раздела в каталоге с временными файлами при каждом запуске:

    % ls -l /tmp/android-$USER
    total 191072
    -rw------- 1 cancel cancel 195680988 Июн 28 12:35 emulator-dHRHv0
    srwxr-xr-x 1 cancel cancel         0 Июн 28 12:21 qemu-gles-22468


    Вот он, в файлике emulator-dHRHv0 (у вас он по-другому будет называться, но лежать в этом же каталоге), просто скопируем его в каталог виртуального девайса под именем system.img:

    % cp /tmp/android-$USER/emulator-dHRHv0 ~/.android/avd/test-4.1.avd/system.img


    Теперь девайс прибиваем и запускаем обычным образом:



    Иконка маркета сверху справа. Enjoy.
    • +6
    • 16,2k
    • 1
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 1
    • 0
      Большое спасибо за руководство! Мне уже давно нужен эмулятор с установленным google play и я перепробовал несколько руководств. Однако после перезагрузки установленные библиотеки исчезали. С этим руководством тоже возникла проблема: на Windows во временном каталоге не возникает копии системного раздела. Может кто-нибудь знает в каком каталоге он создается?

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.