6 февраля 2014 г.

Ускорение работы эмулятора Adroid

Это очень обширная тема. Все кто сталкивается с программированием под Андроид, сразу же видят тормоза работы эмулятора AVD. Рецептов по этому поводу множество. В этой теме буду их собирать и обновлять.

У меня достаточно мощный компютер QuadCore Intel Xeon E3-1230, 3300 MHz (33 x 100), 16Gb RAM и есть SSD диски. Но даже на нем AVD запускаются долго. AVD NexusS запускается за секунд 20 без Snaphost. При использовании Snaphost пара секунд. Но вот другие AVD запускаются ооооочень долго. Или вообще не запускаются к примеру Samsung Galaxy Tab 7.7 выдал во такое неприятное сообщение:

avd start 01

И я думаю с этим сталкиваются все разработчики под Андроид. Выхода из этой ситуации ажна три :)

1) Запускать приложения на реальных устройствах используя отладку по USB

2) Использовать сторонние решения виртуализации Андроид устройств

3) Пробовать таки на сколько возможно ускорить работу эмулятора AVD

Причина такой тормознутости в том, что эмулятор Android, вынужден эмулировать настоящий процессор архитектуры ARM поверх процессора x86. Это добавляет довольно значительный оверхед в плане производительности.

И так попробуем сделать сперва очевидные вещи, которые могут помочь в ускорении работы эмулятора

*** Перенести среду разработки, SDK и AVD устройства на SSD диск ***

Eclipse и SDK я сразу изначально установил на SSD. Но вот сами AVD устройства создаются в каталоге по умолчанию

C:\Users\ПОЛЬЗОВАТЕЛЬ\.android\avd

Итак переносим каталог (директорию) AVD на SSD диск

Для этого делаем следующие шаги

1) Создаем переменную окружения Windows с названием ANDROID_SDK_HOME и параметром указывающим на наш каталог на SSD диске

AVD em 01

Я на всякий случай создал одинаковые переменные свои и системные

2) далее копируем подкаталог .android в каталог H:\AVD (в моем случае, у вас это может быть другой каталог)

3) запускаем AVD Manager и вуаля! видим свои виртуальные девайсы в новом каталоге на SSD диске

AVD em 02

NexusS у меня запустился за 1сек. Моторола так и не захотела запускаться, а вот самсунг стал запускаться побыстрее, но к сожалению с той же ошибкой System UI. Но я поменял настройки Samsung Galaxy Tab 7.7 в DeviceDefinations, создал новое AVD. Желтым подсвечены настройки которые я поменял

AVD em 03

И создал новое AVD

AVD em 04

И AVD Samsung Galaxy Tab запустилось, правда не очень быстро :(. Но потом из Snaphost запустилось за секунду :)

AVD em 05

Ну будем лечить дальше. Тормоза в работе Андроида на AVD все равно сильные и хотелось бы это вылечить. Так что переходим к следующему шагу оптимизации производительности эмулятора Андроид

*** Установка и настройка Intel Hardware Accelerated Execution Manager (Intel® HAXM) ***

Intel® HAXM — это решение, использующее аппаратные возможности виртуализации (Intel® VT) и позволяющее значительно ускорить работу эмулятора Android.

Данное решение работает в паре с эмулятором Android для х86 устройств. При этом, эмулятор будет работать со скоростью, приближенной к скорости работы реального устройства, что поможет сократить время на запуск и отладку приложения.

Примечание: В случае разработки приложения, использующего только Dalvik разработчику не придется ничего менять, т.к. приложение не заметит разницы. В случае с NDK приложением необходимо будет добавить поддержку x86 архитектуры к списку собираемых библиотек. Сделать это несложно, нужно просто добавить поддержку x86 в make файл.

Системные требования

* Процессор с поддержкой VT-x, EM64T, Execute Disable Bit. Чтобы узнать поддерживает ли ваш процессор перечисленные возможности, можно воспользоваться сайтом ark.intel.com/
* Как минимум 1 Гб, а лучше 2Гб оперативной памяти.

Поддерживаемые ОС

* Windows 7 (32/64), Windows Vista* (32/64), Windows XP (32)
* Mac OS X 10.6 и выше (32/64)
* Ubuntu (64)

И так устанавливаем Intel® HAXM…

1) Запускаем Android SDK Manager

2) В разделе Extras выберите «Intel Hardware Accelerated Execution Manager», Отметьте его галочкой и нажмите «Install package…»

AVD em 06

3) Принимаем лицензию и жмем Install

AVD em 07

4) SDK Manager скачает и распакует пакет в каталог extras, находящийся в каталоге, в который был установлен Android SDK

AVD em 08

5) Переходим в каталог H:\android-sdk-windows\extras\intel\Hardware_Accelerated_Execution_Manager и запускаем IntelHaxm.exe на установку

AVD em 10

AVD em 11
AVD em 12

AVD em 13
AVD em 14

AVD em 15

Для того, чтобы проверить, что все установлено верно и работает, необходимо в командной строке выполнить:

sc query intelhaxm

После выполнения данной команды вы увидите текущий статус службы

AVD em 16

Так же может пригодится способ остановить службу:

sc stop intelhaxm

Запустить службу:

sc start intelhaxm

6) Установка эмулятора Android x86

Описанное выше было не что иное, как подготовка почвы. Теперь необходимо установить сам эмулятор, который мы хотим «разогнать» с помощью Intel HAXM. В настоящий момент их уже достаточно много. Уже есть для платформ

Android 4.4.2 (API 19)
Android 4.3    (API 18)
Android 4.2.2 (API 17)
Android 4.1.2 (API 16)
Android 4.0.3 (API 15)
Android 2.3.3 (API 10)

Я их установил когда еще ставил SDK, если вы делали все как написано в моей статье по установке SDK, то у вас они тоже установлены. Если нет, то ставим.

Устанавливаются они с помощью Android SDK Manager. Запускаем, отмечаем галочками интересующие нас образы и устанавливаем.

AVD em 17

7) После установки образа эмулятора Android для x86 необходимо создать новое виртуальное устройство с помощью Android Virtual Device Manager. Для этого:

Запускаем ADV Manager и выбираем создание новойго устройства «New...»

AVD em 18

в CPU/ABI выбираем Intel Atom x86

Готово! Теперь осталось запустить и проверить все ли настроено верно. Выбираем созданный эмулятор и запускаем его кнопкой «Start». Далее идем в настройки и смотрим название устройства. Если все было сделано правильно, то для нашего примера, в поле «Model number» мы увидим строку «Android SDK Build for x86».

AVD em 19

Причем запустилось все очень и очень быстро. И интерфейс стал работать куда быстрее!

Теперь попробуем запустить наш Doodlz на этом AVD

1) Для этого, закроем и снова запустим Eclipse, чтобы он подхватил новое AVD устройство.

2) Затем жмакаем на значек запуска со стрелочкой и выбираем Run Configurations…

AVD em 20

3) Там выбираем вкладку Tragets и на ней выбираем пункт Always prompt to pick device и жмем Run

AVD em 21

Данная настройка позволит каждый раз выбирать на каком AVD запускать программу. Это могут быть как уже запущенные AVD, так и не запущенные. В нашем случае выбираем Launch a new Android Virtual Device и там выбираем наш NexusS на IntelAtom и жмем ОК

AVD em 22

Запускается очень быстро и работает куда быстрее чем было до этого. Это видно во всем – и как меню открывается и как работает интерфейс Android. В общем все стало гораздо быстрее и приятнее. :)

AVD em 23

Но похоже это решение хорошо работает только для эмуляции Android 2.3.3  :(   С Android 4.x все таки заметно притормаживает, но все лучше чем было без HAXM

Небольшое дополнение. Если поставить размер оперативной памяти 1024 в свойствах AVD, то при запуске выдается ошибка

Failed to allocate memory: 8
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

В принципе если задать такое значение, то в строке статуса в окошка создания AVD загорается желтый треугольник и предупреждает, что мол не больше 768, НО!

Это решает просто!

Нужно открыть файл \.android\avd\<avd-profile-name>.avd\config.ini и изменить строчку hw.ramSize=1024 на hw.ramSize=1024MB

*** Genymotion — решение, основанное на Virtual Box ***

Genymotion — решение, основанное на Virtual Box, которое виртуализирует, а не эмулирует Android, обеспечивая ощутимый прирост производительности. Genymotion имеет полный набор средств для быстрой и качественной работы: shell, более 10 виртуальных устройств и интеграцию с Eclipse и Android Studio. Причем все это работает на Linux, Mac и Windows и имеет удобный интерфейс.

Смотрим видео по теме

 

В конце приведу еще ссылочки по этой теме:

http://developer.android.com/tools/device.html

http://developer.android.com/tools/devices/emulator.html

http://software.intel.com/ru-ru/android/articles/intel-hardware-accelerated-execution-manager

http://habrahabr.ru/company/intel/blog/146114/

http://software.intel.com/ru-ru/android-ru

http://software.intel.com/ru-ru/android-ru

http://software.intel.com/ru-ru/articles/intel-atom-x86-image-for-android-4-2-jelly-bean-installation-instructions-recommended

http://developer.alexanderklimov.ru/android/emulator.php

http://javabegin.ru/firststeps/android-firststeps/android-emulator.html

http://habrahabr.ru/post/130201/

Ну и на всякий случая ссылки по Android NDK, вдруг когда сгодятся

http://software.intel.com/ru-ru/android/articles/ndk-android-application-porting-methodologies

http://www.mobilab.ru/androiddev/androidndklesson.html

http://habrahabr.ru/post/135856/

http://4pda.ru/2009/09/30/15491/

1 комментарий: