За плечами платформы Android долгий путь. Всё началось со смартфонов, потом были планшеты, дальше – устройства, работающие под управлением Google TV, Android Wear, Android TV (вместо Google TV), и, наконец – Android Auto. Сборка и тестирование приложений, которые предназначены для всего этого разнообразия, могут стать непростыми задачами для разработчиков. А если добавить сюда различные форм-факторы и разрешения экранов устройств, можно быстро столкнуться с проблемой всесторонней проверки и тестирования программ. Как же быть? К счастью, у нас есть Intel HAXM.


Предварительные сведения


Intel Hardware Accelerated Execution Manager (HAXM) – это Android-эмулятор, который поддерживает аппаратную виртуализацию. Он создаёт невысокую нагрузку на систему, обладает отличной производительностью и быстрым интерфейсом.

Используя Intel HAXM, можно запустить несколько экземпляров Android-эмулятора на одном компьютере, не особо беспокоясь о производительности, о нагрузке на систему или о «тормозах» интерфейса. Подобный подход может быть весьма полезным в итеративном процессе создания и тестирования приложений, он способен дать огромный прирост производительности труда разработчиков.

Образы Android-эмуляторов, рассчитанные на архитектуры, отличные от x86, могут медленно запускаться и с задержкой откликаться на команды пользователя. Кроме того, в отличие от некоторых Android-эмуляторов сторонних производителей, с помощью Intel HAXM вы получаете возможность работать с последними версиями API и платформ Android сразу же после их выпуска.

Здесь вы можете найти подробное руководство по работе с HAXM.

В этом материале мы поговорим о том, как пользоваться возможностями Intel HAXM при создании приложений, рассчитанных на всевозможные варианты платформы Android. Такие приложения могут работать на обычных смартфонах разных форм-факторов, и на устройствах, несущих на борту Android Wear и Android TV.

Работа с универсальным приложением-примером для Android


Компания Google недавно выпустила приложение, на примере которого показано, как охватить одной кодовой базой множество различных Android-устройств.

В примере продемонстрированы передовые подходы к разработке универсальных приложений. Для сборки проекта воспользуйтесь инструкциями, которые можно найти по вышеупомянутой ссылке. Мы, в данном практическом руководстве, будем испытывать пример на x86 HAXM-эмуляторах Android TV, Wear и смартфона.

Проект можно импортировать в Android Studio и воспользоваться возможностями этой среды по сборке и запуску приложения на эмуляторе. Если вы предпочитаете работать с другой IDE, то, о чём пойдёт речь дальше, так же окажется полезным.

Если вам близок интерфейс командной строки, можете просто запустить Gradle-скрипт для сборки приложения из папки с исходным кодом примера.

gradlew assembleDebug

Результирующий APK-файл можно найти в папке «mobile/build/outputs/apk/mobile-debug.apk».

Создание AVD для Android TV и Wear


Для начала нужно удостовериться в том, что у нас имеются самые свежие образы эмуляторов для платформ Android TV, Wear, а так же – для обычных смартфонов.

Откроем Android SDK Manager. Его можно запустить из интерфейса Android Studio или из командной строки (папка <Android-SDK>/tools должна быть указана в переменных среды) с помощью такой команды:

> android


Окно Android SDK Manager. Образы систем, которые нужно загрузить, выделены

После того, как необходимые пакеты загружены, нужно, для использования соответствующих образов систем, настроить конфигурации эмуляторов (то есть, создать набор AVD). Для этого нам понадобится Android Virtual Device Manager. Запустим его из командной строки:

> android avd


Окно Android Virtual Device Manager, здесь можно создавать новые AVD и настраивать существующие

Эмуляция Android Wear


Создадим конфигурацию виртуального устройства для Android Wear так, как показано на рисунке ниже.


Настройка конфигурации эмулятора для Android Wear

После того, как настройки выполнены, нажмём кнопку OK, после чего – запустим эмулятор. Для этого его нужно выделить в окне AVD Manager и нажать на кнопку Start. Вот как выглядит окно эмулятора.


Окно эмулятора Android Wear

Для того чтобы смартфон мог взаимодействовать с устройством, работающим под управлением Android Wear (или с соответствующим эмулятором), нужно дополнительное приложение. Единственный способ установить это приложение на устройство – загрузка из Магазина Google Play. Соответственно, нам понадобится Android-смартфон, который имеет доступ к Магазину.

Устройство должно быть доступно для ADB. Для того чтобы оно смогло подключиться к эмулятору, нужно, чтобы и смартфон, и эмулятор, присутствовали в списке устройств, который можно получить следующей командой:
> adb devices



Список подключенных устройств

Теперь перенаправим TCP-порты такой командой:

> adb -d forward tcp:5601 tcp:5601

Теперь всё готово для сопряжения эмулятора Android Wear и аппаратного устройства. Осталось лишь запустить на смартфоне приложение Android Wear, и, из его меню, выполнить команду подключения к эмулятору. Если подключение удалось, экран эмулятора будет выглядеть так, как показано в левой части рисунка. В правой части показан экран эмулятора, не подключенного к смартфону.


Экраны эмулятора Android Wear в подключенном (слева) и неподключенном (справа) состоянии

Подробные сведения о создании приложений для Android Wear можно найти здесь. APK-файл тестового приложения ничем не отличается от других APK, его можно установить на эмулятор Android Wear с использованием ADB.

> adb -s emulator-5554 install -r mobile\build\outputs\apk\mobile-debug.apk

Проверить, установлено ли приложение на эмуляторе, можно с помощью такой команды:

> adb -s emulator-5554 shell pm list packages | grep example


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

Имя пакета приложения-примера (com.example.android.uamp) присутствует в списке. Из командной строки можно и запустить приложение:

> adb -s emulator-5554 shell monkey -p com.example.android.uamp -c android.intent.category.LAUNCHER 1

Теперь приложение запущено на эмуляторе Android Wear

Эмуляция Android TV


Создадим конфигурацию виртуального устройства для Android TV так, как показано на рисунке ниже.


Настройка конфигурации эмулятора для Android TV

После настройки нажмём на кнопку OK и запустим эмулятор кнопкой Start в окне ADV Manager.

Проверить доступность эмулятора для ADB можно такой командой:

> adb devices

Запишите или запомните идентификатор эмулятора (что-то вроде emulator-55xx). Он понадобится для указания целевого устройства при работе с эмулятором с помощью ADB. Для установки приложения на эмулятор можно воспользоваться такой командой:

> adb -s emulator-55xx install -r mobile/build/outputs/apk/mobile-debug.apk


Запустить приложение на эмуляторе Android TV можно так:

> adb -s emulator-55xx shell monkey -p com.example.android.uamp -c android.intent.category.LAUNCHER 1

Вот как приложение выглядит на экране эмулятора.


Приложение, запущенное на эмуляторе Android TV

Создание и запуск необходимого количества экземпляров эмуляторов


Если в ходе разработки и тестирования приложения возникает необходимость создания и запуска нескольких экземпляров эмуляторов – всё это достижимо с использованием Intel HAXM. При установке HAXM можно настроить размер оперативной памяти, который отводится для его работы. Вот набор конфигураций AVD для Android Wear, TV и смартфона.


Список виртуальных устройств Android

Ниже вы можете видеть приложение-пример, запущенное одновременно на трёх виртуальных устройствах (Android TV, Wear и эмулятор смартфона). Здесь же показаны сведения об использовании CPU. Как видно, все эти экземпляры эмулятора не создают чрезмерной нагрузки на систему.


Три одновременно запущенных эмулятора и сведения о нагрузке на систему, которую они создают

В ходе работы можно настраивать выделение памяти для эмуляторов, оптимизируя потребление ими системных ресурсов. Для того, чтобы перенастроить параметры выделения памяти, заданные при установке HAXM, нужно повторно запустить его установку и указать нужные параметры.

Итоги


В этом материале мы продемонстрировали основные возможности Intel HAXM. Здесь вы можете найти подробности об использовании и настройке Android-эмуляторов. Для того чтобы проверить правильность установки HAXM, а так же то, используется ли он при работе с эмуляторами, обратитесь к этому материалу. Надеемся, Intel HAXM станет вашим надёжным помощником в деле разработки Android-приложений для самых разных устройств, работающих на этой платформе.

Комментарии (12)


  1. maaGames
    02.09.2015 15:10

    Каким чудом удалось запустить эмулятор ATV с 2048 мегабайтами памяти? Стоит превысить 768МБ и начинаются угрозы и слёзы и всё равно 768 испольтзует.


    1. CooperMaster
      02.09.2015 16:16
      +2

      По-моему это зависит от конфигурации системы (настройки HAXM и возможности компьютера). Специально пересоздал эмулятор, дал ему 2 Гб. Он, правда, при запуске всё не использовал, сказал, что может только 1,5 (не 700, как в комментарии). Вот как это в итоге выглядит:



      Подозреваю, что на еще менее мощных системах он выделит еще меньше.


      1. maaGames
        02.09.2015 17:12
        +1

        У меня не хватит кармы для скриншота, поэтому вот копипаста того, что пишет эмулятор при попытке указать больше 768МБ:
        "On Windows, emulating RAM greater than 768MB my fail depending on the system load. Try progressively smaller values of RAM if the emulator fails to launch."
        При этом эмулятор не падает, но при запуске перезаписывает количество памяти на какое-то меньшее число, я не успел прочитать… Хотя, в диспетчер задач зашёл, а там эмулятор 1,8ГБ съел. Но я то просил 2048.
        В системе 16ГБ, для HAXM выделил большую кучу, а оно ругается…


  1. CAJAX
    02.09.2015 15:21
    -1

    А HAXM перестал винду валить в синий экран? По крайней мере в прошлом году этой штукой невозможно было пользоваться.


    1. CooperMaster
      02.09.2015 16:38
      +3

      Я пользуюсь HAXM со второй половины прошлого года, проблем не заметил. Сейчас их тоже нет. А вообще, если у одних работает, у других нет — надо разбираться с конкретным ПК. Какая ОС? Что еще установлено? Какое железо? Как настроен BIOS? Какой температурный режим? Нет ли проблем с памятью, питанием? Делался ли сброс всего, что можно, на параметры по умолчанию (исключая то, что нужно для работы HAXM в BIOS, если в конкретном экземпляре параметры по умолчанию отличаются от требований HAXM)? Делалась ли установка чистой системы и средств разработки?


      1. CAJAX
        02.09.2015 17:17

        Это происходило на разных машинах с разной памятью и чипсетами (хотя конкретно в моем случае обе машины от Asus на 7 и 8 винде). И это было не только моя проблема. В багтрекере гугла есть несколько упоминаний с теми же симпотомами.
        Правда с тех пор, как эмулятор начал падать (да, поначалу работал стабильно) я перешел на эмулятор ARMа и с тех пор не проверял. Поэтому и спросил.


      1. Valle
        02.09.2015 17:59

        Я так понимаю, проблемы с HAXM только на виндах разнообразных. На маках все достаточно стабильно.


        1. Newbilius
          02.09.2015 22:30

          Я пользуюсь HAXM больше года на нескольких ПК, ни на одном ни разу в синий экран не падал. Все под Windows.
          Видимо автору изначального комментария в ветке просто не повезло…


    1. Valle
      02.09.2015 17:54
      +1

      HAXM теперь просто виснет в случайные моменты времени.


  1. Valle
    02.09.2015 17:57
    +1

    Пошел посмотреть, что в статье подразумевается под «охватить одной кодовой базой множество различных Android-устройств.».
    Оказывается — minSdkVersion 21 (Android 5.0)


  1. anton9088
    02.09.2015 18:19

    HAXM эмулятор зависает через пару минут после работы, так и не смог нормально поставить google play services и тестировать пуши. В Genymotion же никаких проблем не замечено


  1. BupycNet
    06.09.2015 15:57

    Имею ноутбук с AMD процессором, у меня почему то раньше, еще до того как интел представил своё ускорение на этом ноуте более менее сносно загружался старый эмулятор ARM. Теперь и x86 не работает (в AMD проце нет ускорения от интел) и ARM ждал 3 часа — не загрузился 5.0.1