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

в 5:52, , рубрики: android market, Android sdk, linux, Разработка под android, метки: , ,

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

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

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

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

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

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

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

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

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

Зачем на основе 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

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

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

Иконка маркета сверху справа. Enjoy.

Автор: Cancel

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js