среда, 15 февраля 2012 г.

Отладка Android приложений


При разработке приложений для Android возникает необходимость их запуска для проверки и отладки перед окончательной публикацией. Существует 4 основных способа–при помощи эмулятора из комплекта Android SDK, реального устройства, подключенного через USB, подключенного через WiFi, и отладка в виртуальной машине в ОС Androidх86. Рассмотрим их немного подробнее.
1. Android Virtual Device
После установки Android SDK разработчику доступно средство эмуляции Android Virtual Device, создание и дальнейшее управление которым ведется при помощи утилиты AVD Manager,которую можно найти в папке, где установлен SDK или вызвать из IDE Eclipse через меню Window->AVD Manager:

Нажимаем кнопку New и видим окно создания нового устройства- необходимо выбрать версию операционной системы(доступны все загруженные версии Android, для работы с сервисами Google, такими как Google Maps необходимо выбирать версии вида «Google API*»), размер карты памяти, указать стоит ли эмулятору сохранять его состоянии между запусками, разрешение экрана и при желании ряд дополнительных опциональных параметров-использование камеры, акселерометра, и других. Теперь наше устройство готово к работе, и при запуске приложения например в Eclipse, виртуальное устройство запустится автоматически, на него установится наша программа и мы увидим следующее окно:
Стоит отметить, что запуск эмулятора занимает довольно продолжительное время, и после окончания работы с текущей версией программы, стоит закрывать лишь ее, оставляя эмулятор в режиме ожидания. Кроме того, при наличии нескольких виртуальных устройств и при необходимости настроить дополнительные параметры, как отображение экрана эмулятора в реальном размере с учетом размера и разрешения монитора, очистка пользовательских данных и др. первый раз устройство стоит запускать вручную в AVD Managerе кнопкой Start:



2.Устройство, подключенное по USB.
Настоящее устройство, будь то телефон или планшет предоставляет лучший с точки зрения совместимости и быстродействия способ тестирования приложений, хотя большое количество разнотипных устройств, отличающихся как версией операционной системы, надстройками производителя и железом требуют в идеале держать целый зоопарк устройств. Для подключения по USB не обходимо сделать следующее:
1. На самом устройстве включаем режим отладки по USB(Настройки-Приложения-Разработка-Отладка по USB).
2. Подключаем устройство к USB порту, при первом подключении установливаем драйвер, который можно загрузить с сайта производителя( сайта производителя)
3. Запускаем утилиту adb с параметром devices и в случае успешной установки видим наще устройство .
4. При отсуствии запущенных виртуальных устройств, запуск программы из Eclipse произойдет на нашем устройстве.
3.Устройство, подключенное через WiFi.
Если по ряду причин нам захочется избавится от необходимости соединять устройство с компьютером проводным  способом, и само устройство содержит WiFi чип нам на помощь придут утилиты adb Wireless или adb over WiFi, которые необходимо загрузить с Android Marketa и установить на телефон. Они требуют root доступ для работы и позволяют запустить adb демон, способный принимать подключения через wifi. Все что стоит сделать после установка на телефоне это запустить знакомую нам утилиту adb connect IPадрес:порт,адрес и порт будут указаны на телефоне.

4.AndroidX86.
Последний способ подойдет не для всех задач-низкоуровневые функции, работа со специфическим «железом»,  окончательная проверка программы перед публикацией-для этого первые три способа будут лучшим выбором, однако учитывая скорость работы виртуальной машины для промежуточных этапов способ довольно хорош. Заключается он в запуске в виртуальной машине портированной на архитектуру х86 версии Android,  образы для основных версий Androidа и справочную информацию по запуску можно найти на сайте проекта. Рассмотрим вкратце процесс установки и настройки.
1.Для примера будем использовать Oracle Virtual Box, досутпный для загрузки по адресу
2.После установки программы запускаем Virtual Box Manager, создаем новую виртуальную машину: тип операционной системы Linux 2.6, обьем виртуальной памяти-минимум 512 МБ, загрузочный диск-новый диск размером от 2ГБ типа VDI.
3.После создания виртуальной машины заходим в ее свойства,  находим вкладку Носители, выбираем устройство, подключенное к IDE контроллеру и загружаем в него образ androidx86,скачанный с вышеуказанного сайта. Стоит отметить, что некоторые образы не совместимы с определенным железом машины-хозяина, поэтому при длительных проблемах  с установкой следует поискать стабильные либо другие версии.
4.Запускаем нашу машину и видим загрузочное меню Android2.2 x86:



Возможно запустить Android сразу же, но мы выбираем установку на жесткий диск.
Создаем жесткий диск в знакомой пользователям Linuxа утилите сfdisk->Partition->New->Primary->размер в МБ, ставим флаг Bootable, записываем таблицу разделов командой Write и выходим из программы.


Выбираем появившийся раздел, форматируем его в формате ext3, подтверждаем необходимость установки Boot-loaderа граб, возможности записи в директорию system, после установки системы создаем виртуальную SD карту и выключаем машину. 
5. В свойствах машины извлекаем диск с образом для установки, заходим в настройки сети и добавляем  второй сетевой адаптер типа «Виртуальный адаптер хоста»- он будет использоваться для подключения adb к виртуальной машине. 
6. По умолчанию при запуске мы можем выбрать режимы экрана MDPI и HDPI в альбомной ориентации, если необходимы свои собственные режимы находи м файл, в котором хранится конфигурация данной машины, открываем его в текстовом редакторе, находим раздел ExtraData и дописываем туда строчки наших режимов в виде
<ExtraDataItem name="CustomVideoMode1" value="480x800х16"/>, причем имя должно быть именно в формате CustomVideoModeНомерВашегоРежимаПоПорядку.
7.Запускаем нашу машину, в загрузочном меню выбираем первую строку, нажимаем дважды клавишу “e”, дописываем фразу vga=ask,нажимаем Enter, затем «b”, ENTER и вписываем номер интересующего нас разрешения:


и по завершению загрузки видим рабочий стол Android:



Остается настроить второй сетевой адаптер-переключаемся в консоль нажатием alt+f1(переключение обратно alt+f7), прописываем команду netcfg eth1 up(при необходимости netcfg eth1 dhcp перед этим), затем netcfg без параметров-запоминаем IP адрес - к сожалению эту процедуру придется повторять при каждом перезапуске виртуальной машины.
8.Подключаемся к виртуальной машине при помощи утилиты adb:
adb connect IP_адрес_eth1_адаптера
9.Запускаем наше приложение из IDE:


Правая кнопка мыши соответствует аппаратной кнопке назад, «Home»-кнопке домой, кнопка вызова контекстного меню-кнопке вызова меню. Для управления мышью внутри виртуальной машины стоит нажать Host+I(Host по умолчанию означает Right Control).
Удачной отладки:)