Задача: нужно поставить Market (а теперь он называется Play) на андроидный виртуальный девайс. Широко известная в узких кругах процедура с копирование файла system.img
больше не работает, пришлось искать новый способ.
Для работы Market на девайсе должен быть установлен Google Services Framework (gsf), это библиотека для работы с гуглоаккаунтами, нужна практически для всех гугловых приложений. В составе SDK уже есть образы с включённым gsf, именно на виртуальный девайс, основанный на таком образе, мы и будем ставить маркет.
Для начала нужно получить пакет собственно с маркетом, его можно достать из любого телефона, где маркет уже установлен и работает:
% adb -d pull /data/app/com.android.vending-2.apk
3061 KB/s (3708455 bytes in 1.182s)
Узнать точное название пакета очень легко:
% adb shell pm list packages -f|grep com.android.vending
Сразу установить этот пакет на виртуальном устройстве не получится. Для этого нужно проделать ряд операций: увеличить размер системного раздела, перемонтировать его для записи, записать туда маркет, сохранить образ этого раздела и затем при следующем старте эмулятора подменить стандартный на него.
Запускаем эмулятор девайса специальным образом (расширяем системный раздел до 250 МБ):
% ~/android/android-sdk-linux/tools/emulator -avd gsf-2.3.3 -partition-size 250 -no-snapstorage
Когда девайс загрузится, нужно перемонтировать раздел /system
в режим для записи, так как изначально он примонтирован с опциями ro
:
% adb -e shell mount|grep system
/dev/block/mtdblock0 /system yaffs2 ro 0 0
для этого из консоли набираем команду:
% adb -e remount
Убедимся, что действительно перемонтировалось:
% adb -e shell mount|grep system
/dev/block/mtdblock0 /system yaffs2 rw 0 0
Проверим, вдруг не девайсе какой пакет с именем com.android.vending уже установлен, он может блокировать настоящий:
% adb -e shell pm list packages -f|grep com.android.vending
package:/system/app/LicenseChecker.apk=com.android.vending
Видим, что стоит какой-то левый пакет LicenseChecker.apk, выносим его нафиг:
% adb -e shell rm /system/app/LicenseChecker.apk
Теперь заходим внутрь девайса через adb и выполняем несколько команд:
% adb -e push com.android.vending-2.apk /system/app/
% adb -e shell chmod 644 /system/app/com.android.vending-2.apk
% adb -e shell rm /system/app/SdkSetup.apk
% cd ~/.android/avd/gsf-2.3.3.avd
% rm -f cache.img userdata-qemu.img snapshots.img snapshots.img.lock
Теперь важный шаг: нужно найти образ раздела /system на диске и сохранить его. Обычно он лежит где-то в каталоге /tmp/android-$USER
и называется как-то типа emulator-7vUOGK
, копируем его в ~/.android/avd/gsf-2.3.3.avd/system.img
. Перезагружаем эмулятор. Всё.