Меня всегда смущали циркулирующие по интернетам способы установки маркета: что-то откуда-то качать, запускать какие-то скрипты. Всё можно сделать гораздо проще и безопаснее.
Сразу предупрежу, что на 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.
Автор: Cancel