Установка приложений Google в эмулятор Android



В этой статье описано как установить дополнительные программы (в частности, Google Apps) в эмулятор Android. Это может понадобиться если вы хотите на эмуляторе:
1. Настроить синхронизацию с аккаунтом Google.
2. Установить календарь и календарь провайдер.
3. Установить Android Market.
4. И прочее…


Несмотря на то, что можно создать эмулятор Android с Google API, в нём отсутствуют такие важные вещи как адаптеры синхронизации контактов, календарей и прочее…

Подготовка


Итак, помимо Android SDK, нам понадобится:
1. Google Apps (в конце, я брал от CyanogenMod 7).
2. Утилита для создания нового образа системы mkfs.yaffs2.arm.
3. Если необходимо иметь полноценную работу с календарём, то добыть Calendar.apk и CalendarProvider.apk. Их можно найти как на просторах Интернет, так и откомпилировать из исходников Android.

Для удобства в системную переменную PATH добавить пути к android-sdk\tools и android-sdk\platform-tools.

Создание эмулятора


Создать эмулятор со следующими параметрами:


Обратить особое внимание!

SD карту создать не менее 200Мб!
Все последующие команды предполагают, что в данный момент активен только один эмулятор. Если у вас запущено несколько эмуляторов/устройств, то к командам с утилитой adb необходимо добавлять параметр -s.

Подготовка к установке пакетов


Запустить эмулятор с увеличенным системным разделом
emulator -avd emulator_2.3.3 -partition-size 150

Перемонтировать системный раздел для записи (спасибо за лёгкий способ перемонтирования ArtRoman):
adb remount

Удалить пакет от SDK, который при загрузке эмулятора возвращает все настройки к дефолтным:
Войти в шелл:
adb shell

rm /system/app/SdkSetup.apk

Выйти из шелла
exit


Установка необходимых пакетов


Извлечь приложения из архива с Google Apps (папка system\app).
Установить пакеты:
adb push CarHomeGoogle.apk /system/app
adb push FOTAKill.apk /system/app
adb push GenieWidget.apk /system/app
adb push GoogleBackupTransport.apk /system/app
adb push GoogleCalendarSyncAdapter.apk /system/app
adb push GoogleContactsSyncAdapter.apk /system/app
adb push GoogleFeedback.apk /system/app
adb push GooglePartnerSetup.apk /system/app
adb push GoogleQuickSearchBox.apk /system/app
adb push GoogleServicesFramework.apk /system/app
adb push LatinImeTutorial.apk /system/app
adb push MarketUpdater.apk /system/app
adb push MediaUploader.apk /system/app
adb push NetworkLocation.apk /system/app
adb push OneTimeInitializer.apk /system/app
adb push SetupWizard.apk /system/app
adb push Talk.apk /system/app
adb push Vending.apk /system/app

Подобным образом устанавить дополнительные приложения (например, Calendar.apk и CalendarProvider.apk).

Создание нового образа системы


Загрузить в эмулятор утилиту создания образа:
adb push mkfs.yaffs2.arm /system/app

Дать права на запуск этой утилиты
adb shell

chmod 777 /system/app/mkfs.yaffs2.arm

Проверить, что все пакеты попали в /system/app:
ls /system/app


Сделать образ системы на SD карту
/system/app/mkfs.yaffs2.arm /system /sdcard/system.img


Выйти из шелла
exit

Теперь придётся набраться терпения, и слить полученный образ «adb pull /sdcard/system.img d:\temp». Скорость примерно 59Кб/с, примерно 25 минут для 100Мб образа.

Закрыть эмулятор.
Из c:\Users\\.android\avd\emulator_2.3.3.avd\ удалить cache.img и userdata-qemu.img (если они есть). Залить в эту папку полученный образ system.img.

Эмулятор готов!

Первый запуск


Запустить эмулятор
emulator -avd emulator_2.3.3


Нас встречает робот

Меняем язык на русский

Войти под аккаунтом Google из этого мастера настроек у меня не получилось. Не смог выдвинуть клавиатуру :).


В итоге пришлось настраивать синхронизацию позже




Заключение


Вот и всё! Всем успехов в разработке!
+44
14 декабря 2011, 13:26
213
Wizard999 4,6

комментарии (14)

+1
ArtRoman #
Любопытно)) До сих пор не понимаю, зачем уменьшать размер системного раздела под используемый размер.

Пара замечаний:
— Перемонтировать системный раздел в режим чтения/записи – adb remount должен сработать тоже, команда проще, ошибиться тяжелее.
— слить полученный образ «adb pull /sdcard/system.img d:\temp». – флешка монтируется как iso-образ, достаточно его примонтировать или открыть каким-нибудь винраром, время копирования уменьшится до пары минут.
0
Wizard999 #
adb remount работает, спасибо!
Попробовал sdcard.img открыть 7z и Daemon Tools. Не получилось :(.
0
ArtRoman #
Прошу прощения, это всё же действительно img, а не iso. Но формат в образе стандартный (msdos), поэтому в маке этот файл монтируется дабл-кликом. На винде можно попробовать воспользоваться ultraISO или чем-то подобным.
0
hhrhhr #
еще год назад бродила по сети инструкция по добавлению маркета в эмулятор. за этот год что-то изменилось, или «на хабре не было такой статьи»?
0
Wizard999 #
1. Для меня важна была синхронизация контактов и календарей с аккаунтом Google. А без установки Google Apps синхронизация не работала (писалось Sync is OFF — отсутсвовали адаптеры синхронизации).
2. В указанной статье (и во многих других) не описано, что нужно сделать новый system.img! После перезагрузки эмулятора все приложения пропадали, SdkSetup.apk был опять на месте. Уж не знаю, что я не так делал…
0
hhrhhr #
если не удалять userdata.img, userdata-qemu.img и cache.img после первого ребута, то и приложения пропадать будут, и SdkSetup.apk будет восстанавливаться.
0
Wizard999 #
Тогда понятно. Во всех статьях написано, что эти файлы нужно удалять. Странно… В следующий раз попробую.
0
Wizard999 #
Ой! «не» не заметил! Так я их всегда удалял, и эмулятор возвращался в своё первоначальное состояние!
0
ArtRoman #
При записи в /system системный образ наверняка не меняется, поэтому потом опять всё получаем как было. В любом случае, описанный в статье способ достаточно удобный, ведь на выходе мы получем один образ, который можно использовать и для других виртуальных андроидов.
0
Wizard999 #
Совершенно верно! Я этот system.img уже распространил среди коллег :)
0
BreatheInMyVoid #
Спасибо за статью. Помню пытался быстро сотворить подобное по нужде, танцевал-танцевал с бубном, но так и не добился нормальной работы. Плюнул и делал все на «железе» :) Не додумался Google Apps из CyanogenMod выдрать, у меня были какие-то стрёмные. Попробую настроить по вашему гайду, полезная вещь иногда.
0
MechanisM #
Спасибо. У меня как-раз с этим были проблемы. Очень пригодится.
+2
Prototik #
Ну я поступил проще:
adb shell
cat /dev/mtd/mtd2 > /sdcard/system.img
exit

На реальном телефоне:) И вставить полученный образ в эмулятор — все работает:)
0
Wizard999 #
Тут подробная инструкция по созданию образов.

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