21 June 2012

Google Play и root права для Android Emulator

Development for Android
Tutorial
Sandbox
Привет, Хабр!

Хочу поделиться своим опытом набивания шишек добавления Google Play в эмулятор, входящий в состав Android SDK. Вы спросите: "Да что тут может быть сложного? Добавить нужные .apk и пользоваться с удовольствием, об этом уже писали на Хабре тут!"

А вот и нет, подводных камней оказалось достаточно много. О них я расскажу под катом. Кстати, попутно расскажу как получить root права для эмулятора.



Интересно? Добро пожаловать под кат.

UPD: Обновил устаревшие ссылки.

И так, для начала — чем моя инструкция отличается от написанной ранее? Тем, что при использовании Google Play вы не столкнётесь с такой картиной, когда в категориях видно три с половиной приложения. Например вот, в Top Free видно целых два (sic!) приложения.:


Инструкция написана для ОС Windows, но подойдёт и для других поддерживаемых SDK ОС, просто с маленькими изменениями.

Нам потребуется:
Andoid SDK со следующими установленными пакетами:
  • Android SDK Tools
  • Android SDK Platform-tools
  • SDK Platform для Android 2.3.3
  • Extras/Android Support
  • Extras/Google USB Driver
Обладателям процессоров от Intel с поддержкой виртуализации рекомендую, для начала, проследовать инструкции, недавно опубликованной тут, и создать эмулятор с андроидом 2.3.

Создайте папку с именем GooglePlay и откройте консоль в ней. Это легко сделать, кликнув правой кнопкой в папке, с зажатой клавишей Shift. К сожалению это работает только в Windows Vista и выше. Тем, кто пользуется XP, придётся писать пути для cd.

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

После установки всех пакетов — добавьте android-sdk\tools и android-sdk\platform-tools в системный PATH для удобства работы.

Создайте эмулятор для Android 2.3 с помощью AVD Manager, задав размер SD карты в 200-250 мб.


Запустите эмулятор и когда он полностью загрузится — откройте командую строку и введите команду "adb devices". Вы должны будете увидеть эмулятор в списке подключённых устройств:


Если его там нет — в эмуляторе заходим в настройки (Кнопка меню — Настройки — Приложения — Разработка). Поставьте галочку на пункте "Отладка по USB" и перезапустите эмулятор. Теперь он должен отображаться в списке.

Далее вас ждёт увлекательный не очень ввод кучи консольных команд и ожидание.

Нам понадобятся файлы GoogleServicesFramework.apk, MarketUpdater.apk и Vending.apk из скачанного архива с GoogleApps. Откройте его и скопируйте их в созданную ранее папку.

Теперь нам нужно сделать несколько хитрых хаков для того чтобы нам были доступны все приложения из Google Play, вне зависимости от их требований. Иначе — вас ожидает картина из нескольких одиноких приложений, как было показано выше. Стоит сделать ремарку — запустить неподдерживаемые приложения не получится, но эти хаки позволят скачать эти приложения на девайс и, после, вытащить apk из эмулятора, например.

Выполняем команду:
adb pull system/build.prop .

На всякий случай замечу, что точка в конце команды — это не опечатка.
В папке появится файлик build.prop. Открываем его текстовым редактором, находим строчку начинающуюся с ro.product.cpu.abi
После неё добавляем ещё одну строку:
ro.product.cpu.abi2=armeabi-v7a

Так же, после комментария ADDITIONAL_BUILD_PROPERTIES нужно добавить строчку
ro.opengles.version=131072

Это позволит нам видеть приложения, которые требуют архитектуру процессора ARM7 и поддержку версии версии 2.0.

Так же нам нужен архив с permissions, который можно взять здесь.
Перетащите папку permissions из архива в нашу папку GooglePlay.
Эти файлы нужны для приложений, которые требуют определённое оборудование для работы. Например камеру, или акселерометр.

Кстати, насчёт ввода кучи консольных команд я соврал. Хе-хе.
Вам нужно будет всего лишь создать два .bat файлика. Приступим-с.

Первый файл назовите permissions.bat и наполните его таким вот содержанием:
adb push permissions/android.hardware.camera.autofocus.xml /system/etc/permissions/
adb push permissions/android.hardware.camera.flash-autofocus.xml /system/etc/permissions/
adb push permissions/android.hardware.camera.front.xml /system/etc/permissions/
adb push permissions/android.hardware.camera.xml /system/etc/permissions/
adb push permissions/android.hardware.location.gps.xml /system/etc/permissions/
adb push permissions/android.hardware.location.xml /system/etc/permissions/
adb push permissions/android.hardware.sensor.accelerometer.xml /system/etc/permissions/
adb push permissions/android.hardware.sensor.compass.xml /system/etc/permissions/
adb push permissions/android.hardware.sensor.gyroscope.xml /system/etc/permissions/
adb push permissions/android.hardware.sensor.light.xml /system/etc/permissions/
adb push permissions/android.hardware.sensor.proximity.xml /system/etc/permissions/
adb push permissions/android.hardware.telephony.gsm.xml /system/etc/permissions/
adb push permissions/android.hardware.touchscreen.multitouch.jazzhand.xml /system/etc/permissions/
adb push permissions/android.hardware.touchscreen.multitouch.xml /system/etc/permissions/
adb push permissions/android.hardware.touchscreen.xml /system/etc/permissions/
adb push permissions/android.hardware.wifi.xml /system/etc/permissions/
adb push permissions/android.software.live_wallpaper.xml /system/etc/permissions/
adb push permissions/android.software.sip.voip.xml /system/etc/permissions/
adb push permissions/com.android.location.provider.xml /system/etc/permissions/
adb push permissions/features.xml /system/etc/permissions/
adb push permissions/handheld_core_hardware.xml /system/etc/permissions/
adb push permissions/platform.xml /system/etc/permissions/



После — создайте ещё один, с произвольным названием, например make.bat и таким содержанием:
adb remount
adb push build.prop /system/
adb push su /system/bin/
adb push Superuser.apk /system/app/
adb push Vending.apk /system/app/
adb push MarketUpdater.apk /system/app/
adb push GoogleServicesFramework.apk /system/app/
call permissions.bat
adb push mkfs.yaffs2 /data/misc/
adb shell rm /system/app/SdkSetup.apk
adb remount
adb shell chmod 4755 /system/bin/su
adb shell chmod 777 /data/misc/mkfs.yaffs2
adb shell ./data/misc/mkfs.yaffs2 /system /sdcard/system.img
adb pull /sdcard/system.img system.img


Для тех, кто выбрал эмулятор от Intel — обратите внимание на названия файлов в make.bat.
Строчки
adb push su /system/bin/
adb push mkfs.yaffs2 /data/misc/
adb shell chmod 777 /data/misc/mkfs.yaffs2
adb shell ./data/misc/mkfs.yaffs2 /system /sdcard/system.img


следует заменить на:
adb push su.x86 /system/bin/su
adb push mkfs.yaffs2.x86 /data/misc/
adb shell chmod 777 /data/misc/mkfs.yaffs2.x86
adb shell ./data/misc/mkfs.yaffs2.x86 /system /sdcard/system.img



В итоге содержимое папки GooglePlay должно быть таким:



Теперь — запускайте файл make.bat и начинайте ждать. Имейте ввиду, что последние две команды из файла make.bat будут выполняться долго. Есть маленькая хитрость — что бы ускорить этот процесс нужно что-нибудь делать на эмуляторе. Например, серфить хабрахабр из эмулятора. Я не знаю как и почему, но когда эмулятор нагружен — это здорово ускоряет процесс создания и копирования system.img.

После того, как консоль отрапортует о выполнении своим закрытием, мы обнаружим в рабочей папке файлик system.img. Теперь закроем эмулятор. Не нужно сразу логиниться или устанавливать какие-то приложения — вы потеряете все изменения после перезапуска эмулятора.

Хватайте появившийся system.img и заменяйте им файлик из папки
android-sdk/platforms/android-10/images/

Если кто-то взял за основу x86 образ от Intel — используйте папку
android-sdk/add-ons/addon-intel_atom_x86_system_image-intel_corporation-10/images/x86

Не забудьте сделать резервную копию оригинального system.img!
Обратите внимание, что папка android-10 эквивалента для андроида версии 2.3. Для других версий андроида число после android- равно API Level данной версии.

Теперь заходите в папку, в которой у вас находятся файлы эмулятора и удаляйте файлы "cache.img", "userdata-qemu.img", "snapshot.img", "userdata.img"(если он там есть). По умолчанию для Win7 это
C:/Users/ИмяВашегоПользователя/.android/avd/имяВашегоЭмулятора.avd/

После этого запускайте эмулятор, открывайте Google Play, логиньтесь, принимайте условия соглашения и… перезапускайте эмулятор ещё раз, потому что, зачастую, приложения не хотят загружаться сразу после логина.

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


Надеюсь, моя статья поможет кому-нибудь сохранить время. Спасибо за то, что уделили время на её прочтение.
Tags:androidemulatorgoogleplaygoogle playподводные камниrootconsoleterminalintel
Hubs: Development for Android
+40
26.3k 230
Comments 16