Android: что внутри?

gPhone       Со своей операционной системой Android Google планирует совершить серьезный передел рынка мобильных платформ. Для этого собраны лучшие силы: Linux, Quartz от Symbian, еще одна операционная система SavaJe, база данных SQLite и, наконец, J2ME. С Android Google планирует не только сыграть на сильных сторонах Linux, но и преодолеть недостатки Java.

В этой статье мы постараемся ответить на следующий конкретный вопрос: что представляет собой работа с SDK Android? По пути мы постараемся выяснить, какие тайны пока еще скрывает в себе эта мобильная платформа. Для этого мы исследуем недавно вышедшую SDK. Впрочем, должен предупредить, что моя SDK не является окончательной версией, так что будем надеяться, что проблемы, описанные ниже, будут так или иначе решены. Хотя SDK работает на платформах Windows, Linux и Mac OS X, я использую версию для Windows.

Внутри Android

В сердце Android – ядро Linux. Уровнем выше находятся библиотеки, еще выше – прикладные среды и, наконец, на самом верхнем уровне разместились приложения. На уровне библиотек функционирует код таких приложений как медиапроцессоры для мультмедийных данных, ядро веб-браузера, машина для отрисовки шрифтов и база данных SQLite. Собственно исполняемый код ОС также находится на уровне библиотек.

Над библиотеками расположились прикладные среды. К ним относятся наборы сервисов многократного использования и стандартные компоненты для взаимодействия с приложениями. Например, одна из прикладных сред служит поставщиком контента – управляет хранением и подачей данных. Прикладной интерфейс машины SQLite также является одним из модификаций поставщика контента.

Собственно приложения выполняются на самом верху стека ОС. Android будет поставляться с набором корневых приложений, таких как почтовый клиент,google календарь, веб-браузер и ряд других. Все приложения, разрабатываемые с помощью SDK, также выполняются на этом уровне.

Разработка приложения для Android ведется на языке Java. Затем исходный код компилируется в байт-код Java, после чего разработчик должен запустить инструмент под названием dx. Этот инструмент конвертирует байт-код Java в так называемый байт-код dex – аббревиатура для «Dalvik executable». Dalvik – это виртуальная машина, которая занимается собственно выполнением приложений Android.

С точки зрения разработчика, Dalvik выглядит как обычная виртуальная машина Java, но формально он ей не является. Как уже говорилось, Dalvik работает с особым байт-кодом dex, а не с кодом Java. Также есть ряд отличий между классами файлов Dalvik и классами Java. Однако по сути разработка приложений для Android сводится именно к написанию кода Java.

SDK Android

Предпочтительной платформой разработки для ОС Android является Eclipse версии Europa. Вам также понадобится JDK 5 или JDK 6 для того, чтобы использовать ряд инструментов Android – стандартной поставки JRE из Eclipse для этого недостаточно. На сайте Android предлагается установить специальный набор средств разработчика для Eclipse в виде плагина. Впрочем, если вы не знакомы с Eclipse, можно использовать и другие IDE, например IntelliJ.

Опытные разработчики могут работать только в режиме командной строки, используя специальные инструменты в составе SDK. Так, инструмент activityCreator поставляется в виде исполняемого файла для Windows и скрипта Python для Linux и Mac. С помощью этого инструмента разрабатывается среда приложений для активностей (активность, activity – так в Android именуется приложение, чуть подробней об этом ниже). Выполнение activityCreator позволяет создавать скелетные файлы Java, поддиректории проекта приложения, необходимые файлы XML, скриптовые файлы Ant (необходимые для компиляции исходника и построения приложения) и ряд других объектов. Когда приложение откомпилировано, его можно запустить с помощью другого инструмента – adb (Android debug bridge).

В числе других командных инструментов SDK можно упомянуть logcat, который выводит лог системных сообщений, полезных при отслеживании ошибок на эмуляторе Android. Для более глубокого анализа можно импортировать в приложение специальный класс Debug, который дает возможность запускать и прерывать трассировку выполнения. Результаты трассировки просматриваются приложением TraceView.

Ну и, конечно же, нельзя не упомянуть собственно эмулятор Android. Он воспроизводит графический интерфейс гипотетического устройства на базе Android, включая кнопки и клавиатуру QWERTY. Эмулятор довольно неплохо имитирует реальное мобильное устройство, хотя есть и понятные ограничения (например, нельзя принять входящий звонок). Эмулятор Android работает на модифицированной версии замечательной открытой среды виртуализации QEMU от Fabrice Bellard. Версия для Android эмулирует процессор ARM, на котором запущена ОС Linux.

Работа с Eclipse

После установки плагина Eclipse для Android разработка приложения для этой ОС во многом идентична разработке приложения для любой другой платформы. В дерево шаблонов проектов добавляется шаблон Android Activity. Вы запускаете новый проект, и плагин создает основные файлы Java, необходимые каталоги и скелетные ресурсные файлы.

Плагин для Eclipse управляет компиляцией, конвертацией в dex, запуском эмулятора и загрузкой приложения. Поскольку код для Android пишется на Java, редактор ведет себя так, как будто вы создаете типичное Java-приложение. Ресурсные файлы, написанные на XML, редактируются с помощью XML-редакторов, ряд которых есть и в Eclipse. Отладка также управляется из Eclipse.

google

К сожалению, Android содержит ряд новых понятий, которые разработчики должны запомнить. Например, приложение называется активностью. (В документации активность описывается как «единая сфокусированная задача, которую может выполнить пользователь».) В пределах одной активности вы определяете виды (view). Вид реализуется через класс View и относится к определенной части экрана, управляя отрисовкой объектов и обработкой нажатий пользователем на сенсорный экран. (С точки зрения Java, вид по сути эквивалентен объекту Canvas). Обработка событий управляется классом Intent, который моделирует функциональность активности.

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

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

Еще до того как я начал тестирование SDK (это было в середине февраля), вышла его новая версия (m5-rc14). Я установил ее вместе с плагином для Eclipse на систему Windows XP с объемом памяти 1 Гб и процессором 1 ГГц. Установка прошла без проблем, однако для запуска первой активности из Eclipse эмулятор загружался примерно 30 минут. Другие пользователи на форуме Android сообщали об аналогичной проблеме. Скорее всего, на более быстрых системах загрузка будет проходить быстрее, в чем я убедился, когда проделал эти же действия на машине с 3-ГГц процессором и 2 Гб памяти под Windows 2000 – загрузка эмулятора прошла всего за 30 секунд. Конечно, такую огромную разницу (30 секунд и 30 минут) никак нельзя назвать приемлемой, особенно если вы застряли на отладке сложной проблемы.

Вывод

Если подводить какие-то итоги, то нельзя не заметить, что прогресс Android налицо. Впрочем, пока еще рано приступать к созданию увесистых приложений, во всяком случае, на этом пути вас могут подстерегать сложные и неожиданные проблемы. Однако текущей версии SDK более чем достаточно для оценки перспектив платформы и создания первых несложных программ.

Однако меня беспокоит тот факт, что пока я не увидел в Android ничего принципиально нового в сравнении с другими карманными ОС. Возможно, «убойной» инновацией станет введение реляционной базы данных на основе SQL, но пока лично у меня уверенности в этом нет. Как бы то ни было, за Android стоит не кто иной, как всемогущая Google, что само по себе говорит о многом. Удастся ли Google решить имеющиеся проблемы и серьезно застолбить место на рынке мобильных платформ, покажет только время. Пока предпосылки для этого есть.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *