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

Привет, Хабр!

Хочу поделиться своим опытом набивания шишек добавления 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, логиньтесь, принимайте условия соглашения и… перезапускайте эмулятор ещё раз, потому что, зачастую, приложения не хотят загружаться сразу после логина.

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


Надеюсь, моя статья поможет кому-нибудь сохранить время. Спасибо за то, что уделили время на её прочтение.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 16

    0
    Непонятно, зачем столько шаманства с GoogleServicesFramework.apk, достаточно поставить образ с google-services (он штатный в эмуляторе) и в нём уже есть всё нужное, только маркет поставить. Опять же шаманство с (пере)созданием образа системного раздела: эмулятор сам сохраняет образ в каталоге с временными файлами, называется он как-то типа emulator-7vUOGK, нужно его только до закрытия эмулятора найти и подменить system.img им.
      0
      А вы попробуйте сами в Google API образ добавить Google Play. Apk файл добавляется, запросто. Но вот загвоздка, после пересоздания образа и перезагрузки он попросту не воспринимает Google Play как установленный, хотя apk лежит себе в /system/app/.

      А про временный файл system.img я не знал и поиски в директориях android-sdk\platforms\android-10\images, .android\avd\, системном TEMP не дали результата. Погуглив я нашёл туториал, ссылающийся на это название, но туториал написан для ОС на базе Linux, а моя инструкция кроссплатформенна. Если это не так — поделитесь своими знаниями, пожалуйста.
        0
        Я добавлял, всё отлично работало.

        Про винду ничего сказать не могу, но стопудово образ где-то лежит, можно попробовать каким-нибудь файловым монитором определить, где этот временный образ сохраняется. Скорее всего, где-то в Local settings/temp.

        Ещё важно отключить снапшоты, с ними бывают проблемы при подобном шаманстве.
      0
      Трюк с permissions и build.prop прокатит для планшетов на MIPS? Многие из программ в маркете не имеют в своем составе нативные библиотеки, но все равно при этом не отображаются на моем Ainol Novo7 Paladin. Вручную их ставить и обновлять уже немного поднадоело.
        +1
        Должно сработать. Однако, может понадобится вайп разделов data и cache, c потерей пользовательских приложений. А может и не понадобиться. Я сегодня без вайпа выдал свой древний GSmart 1305 за Samsung Galaxy SII, дабы купить Mass Effect и GTA III на распродаже, на будущее. :)
          +1
          Ух, я всегда на распродажах в Steam покупаю «на будущее». Половины игр не играл вообще. Потом думаю над тем, нафига я их покупал. А на следующей распродаже ситуация повторяется. Сейчас вот только GTA3 для телефона купил, чтобы проверить свой ThL V9 на играбельность. Возврат денег не потребовался, все летает)
          0
          Есть программа MagicCode, которая как раз и говорит системе, что она не просто мипс, а вполне совместимый мипс, после чего и маркет становится полным программами, и программы эти начинают ставиться и даже работать.
            0
            Эм, нет. MagicCode у меня стоит. И он просто транслирует ARM6 библиотеки на MIPS, но не более. Даже ARM7 не поддерживает. А уж про маркет я вообще молчу. В маркете из-за установленного MagicCode вообще ничего не меняется.
              0
              Странно. Если раньше стартовая страница была заполнена всякой чушью (чтобы хотя бы один экран наполнить полностью), то после активации программы там стало несколько экранов контента по высоте.
                0
                Хм, не обращал внимания. Надо будет проверить. Знаю только, что нужные мне программы все равно не появились, хотя при этом они успешно работают, если установить их вручную. build.prop и permissions Вы не меняли?
                  0
                  Нет, я не менял сам, но прошивку поставил русифицированную (не знаю, может там имеются некоторые модификации по умолчанию). Какие программы не были найдены? Опера мини, MX плеер и некоторые другие программы (сборки под MIPS) доступны на официальных сайтах.
                    0
                    Да в общем-то никакие практически. Были доступны лишь мелочи — ES Проводник и Диспетчер задач и что-то еще. Не могу вспомнить, т.к. ставил давно. Запомнились эти два, потому что они шли сразу с планшетом и из маркета запросто обновлялись. Остального не было — ни ВКонтакте, ни QuickPic, ни Opera Mobile или Mini, ни PowerAmp, ни MX Player, ни ATE (хотя позже его выпустили и под MIPS). Все это я доустанавливал ручками.
          0
          Может rnj подскажет как заставить работать iptables на эмуляторе андроида? Обязательно перекомпилировать ядро или где-то можно скачать готовое?
            0
            Мне вот всегда было интересно
            А можно запустить 1000 эмуляторов и поутанавливать приложения что бы накрутить скачки?
              0
              Если забыть про то, что приётся создать 1000 аккаунтов — то можно конечно.
                0
                аккаунт стоит 1 цент — столько стоит распознанная капча у китайцев — 1000 аккаунтов совсем не страшно

            Only users with full accounts can post comments. Log in, please.