Это очень обширная тема. Все кто сталкивается с программированием под Андроид, сразу же видят тормоза работы эмулятора 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 выдал во такое неприятное сообщение:
И я думаю с этим сталкиваются все разработчики под Андроид. Выхода из этой ситуации ажна три :)
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 диске
Я на всякий случай создал одинаковые переменные свои и системные
2) далее копируем подкаталог .android в каталог H:\AVD (в моем случае, у вас это может быть другой каталог)
3) запускаем AVD Manager и вуаля! видим свои виртуальные девайсы в новом каталоге на SSD диске
NexusS у меня запустился за 1сек. Моторола так и не захотела запускаться, а вот самсунг стал запускаться побыстрее, но к сожалению с той же ошибкой System UI. Но я поменял настройки Samsung Galaxy Tab 7.7 в DeviceDefinations, создал новое AVD. Желтым подсвечены настройки которые я поменял
И создал новое AVD
И AVD Samsung Galaxy Tab запустилось, правда не очень быстро :(. Но потом из Snaphost запустилось за секунду :)
Ну будем лечить дальше. Тормоза в работе Андроида на 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…»
3) Принимаем лицензию и жмем Install
4) SDK Manager скачает и распакует пакет в каталог extras, находящийся в каталоге, в который был установлен Android SDK
5) Переходим в каталог H:\android-sdk-windows\extras\intel\Hardware_Accelerated_Execution_Manager и запускаем IntelHaxm.exe на установку
Для того, чтобы проверить, что все установлено верно и работает, необходимо в командной строке выполнить:
sc query intelhaxm
После выполнения данной команды вы увидите текущий статус службы
Так же может пригодится способ остановить службу:
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. Запускаем, отмечаем галочками интересующие нас образы и устанавливаем.
7) После установки образа эмулятора Android для x86 необходимо создать новое виртуальное устройство с помощью Android Virtual Device Manager. Для этого:
Запускаем ADV Manager и выбираем создание новойго устройства «New...»
в CPU/ABI выбираем Intel Atom x86
Готово! Теперь осталось запустить и проверить все ли настроено верно. Выбираем созданный эмулятор и запускаем его кнопкой «Start». Далее идем в настройки и смотрим название устройства. Если все было сделано правильно, то для нашего примера, в поле «Model number» мы увидим строку «Android SDK Build for x86».
Причем запустилось все очень и очень быстро. И интерфейс стал работать куда быстрее!
Теперь попробуем запустить наш Doodlz на этом AVD
1) Для этого, закроем и снова запустим Eclipse, чтобы он подхватил новое AVD устройство.
2) Затем жмакаем на значек запуска со стрелочкой и выбираем Run Configurations…
3) Там выбираем вкладку Tragets и на ней выбираем пункт Always prompt to pick device и жмем Run
Данная настройка позволит каждый раз выбирать на каком AVD запускать программу. Это могут быть как уже запущенные AVD, так и не запущенные. В нашем случае выбираем Launch a new Android Virtual Device и там выбираем наш NexusS на IntelAtom и жмем ОК
Запускается очень быстро и работает куда быстрее чем было до этого. Это видно во всем – и как меню открывается и как работает интерфейс Android. В общем все стало гораздо быстрее и приятнее. :)
Но похоже это решение хорошо работает только для эмуляции 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://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
Этот комментарий был удален автором.
ОтветитьУдалить