1 Введение
в компьютерную
платформу Android
Компьютеры становятся все более «персональными», возможности доступа к ним
в любое время и из любого места все время расширяются. В авангарде этого процесса находятся мобильные устройства, которые трансформируются в компьютерные платформы. Мобильные телефоны уже давно используются не только для
разговоров — с их помощью можно за определенный период времени передать
данные и видео. Мобильные устройства стали выполнять такой широкий спектр компьютерных задач общего профиля, что именно такие устройства могут стать новым поколением персональных компьютеров (ПК). Кроме того, даже ожидается, что некоторые производители традиционных моделей ПК — в частности, ASUS, HP и Dell — будут делать устройства, многие конструктивные параметры которых будут основаны на ОС Android. Фронт, на котором разворачивается борьба между операционными системами, вычислительными платформами, языками программирования и средами разработки, смещается в сторону мобильных устройств.
Скоро в IT-индустрии ожидается быстрое наращивание темпов и объемов проиндустрии граммирования для мобильных устройств, так как у все большего количества приложений появляются мобильные аналоги. Чтобы вы не стояли в стороне от этой тенденции, мы расскажем, как применять Java для написания программ, работающих на платформе Google Android (http://developer.android.com/index.html), свободной платформе для разработки мобильных приложений. Мы воодушевлены потенциалом Android, поскольку это очень продвинутая платформа, на которой применяется ряд новых парадигм дизайна фреймворка (даже с учетом ограничений, с которыми сопряжена работа на мобильной платформе).
В этой главе будет сделан обзор Android и его комплекта для разработки программ (SDK). Мы рассмотрим основные пакеты, кратко расскажем, каким темам будут посвящены следующие главы, объясним, как можно извлечь пользу из исходного кода Android, и особо подчеркнем преимущества программирования для платформы Android.
Новая платформа для нового персонального компьютера Тот факт, что выделенные устройства, такие как мобильные телефоны, станут в один ряд с другими маститыми платформами общего назначения (рис. 1.1), неНовая платформа для нового персонального компьютера мало озадачивает программистов. Эта новая тенденция открывает доступ к мобильным устройствам для традиционных языков программирования, благодаря чему диапазон применения мобильных приложений и их доля на рынке растут.
Рис. 1.1. Мобильное устройство — это новый ПК Платформа Android реализует идею адаптации программ общего назначения к мобильным устройствам. Это многосторонняя платформа, представляющая собой программный стек операционной системы на основе Linux, предназначенный для управления устройствами, памятью и процессами. В библиотеках Android содержатся функции, связанные с телефонией, видео, графикой, программированием пользовательских интерфейсов и некоторыми другими возможностями мобильного устройства.
ПРИМеЧАНИе Хотя платформа Android и предназначена для разработки под мобильные устройства, она обладает качествами полноценного фреймворка для локального компьютера. Google позволяет писать для этого фреймворка программы на Java, предоставляя разработчикам комплект инструментов (Software Development Kit) под названием Android SDK. если вы работаете с этим инструментарием, то у вас почти не возникает ощущения, что вы создаете программу для мобильного устройства, так как вам открыт доступ к большинству библиотек классов, используемых на локальном компьютере или сервере, в том числе к реляционной базе данных.
Комплект Android SDK поддерживает большинство функций платформы Java Standard Edition (Java SE), кроме абстрактного оконного интерфейса (Abstract Window Toolkit, AWT) и Swing. Вместо AWT и Swing в Android применяется собственный расширенный современный фреймворк пользовательского интерфейса.
Поскольку вы пишете приложения на Java, вам может понадобиться виртуальная машина Java (Java Virtual Machine, JVM), которая отвечает за интерпретацию исполняемого байт-кода Java. Обычно JVM обеспечивает необходимую оптимизацию, чтобы помочь Java достичь уровней производительности, сравнимых с аналогичными уровнями транслируемых языков — таких как С и С++. В Android предлагается собственный оптимизированный вариант JVM для исполнения скомпилированных файлов классов Java. Это делается, чтобы преодолеть ограничения, которые 26 Глава 1. Введение в компьютерную платформу Android свойственны для мобильных устройств, в частности связанные с памятью, скоростью работы процессора и мощностью. Эта виртуальная машина называется Dalvik VM. Мы подробно рассмотрим ее в разделе «Глубокий анализ Dalvik VM»
этой главы.
Понятность и простота языка Java, усиленная обширной библиотекой классов Android, превращает Android в конкурентоспособную платформу для написания программ.
На рис. 1.2 сделан обзор программного стека Android (мы рассмотрим его подробнее в разделе «Программный стек Android» этой главы).
Рис. 1.2. Схематическое представление программного стека Android История Android Как Android появился в сфере операционных систем для мобильных устройств?
В мобильных телефонах используется целый ряд операционных систем — например, Symbian OS, Microsoft Windows Mobile, Mobile Linux, iPhone OS (на базе Mac OS X), История Android Moblin (от Intel) и большое количество других патентованных операционных систем. Но пока еще ни одна из ОС не стала стандартом де-факто. Современные интерфейсы прикладного программирования (API) и среды для разработки моAPI)) бильных приложений имеют слишком много ограничений и, кажется, сильно уступают аналогичным фреймворкам для локальных компьютеров. И вот в этой сфере появляется Google. Платформа Android выглядит многообещающе — для нее характерны и открытость, и доступность, ее код распространяется свободно, а фреймворк разработки отличается высоким техническим уровнем.
Google приобрела стартап Android Inc. в 200 году, чтобы приступить к разработке платформы Android (рис. 1.3). Ведущими фигурами в Android Inc. были Энди Рубин (Andy Rubin), Рич Майнер (Rich Miner), Ник Сиэрс (Nick Sears) и Крис Уайт (Chris White).
Рис. 1.3. Хронология развития Android В конце 2007 года группа лидирующих компаний, работающих в области мобильной связи, сплотилась вокруг платформы Android, сформировав Open Handset Alliance (http://www.openhandsetalliance.com). Некоторыми из наиболее известных членов альянса являются:
Sprint Nextel;
T-Mobile;
Motorola;
Samsung;
Sony Ericsson;
Toshiba;
Vodafone;
Google;
Intel;
Texas Instruments.
Одной из целей альянса является ускоренное внедрение инноваций и улучшение отклика на нужды потребителя — и первым значительным результатом работы альянса стала платформа Android. Она была разработана для удовлетворения потребностей операторов мобильной связи, производителей мобильных устройств и разработчиков программ. Члены альянса приняли решение предоставить значительный объем интеллектуальной собственности по свободной лицензии Apache, версия 2. ПРИМеЧАНИе Производители мобильных устройств не должны платить никаких лицензионных взносов за установку Android на свои телефоны или другие устройства.
Сначала инструментарий Android SDK был выпущен в ноябре 2007 года как предварительный вариант. В сентябре 2008 компания T-Mobile анонсировала выMobile ход T-Mobile G1, первого смартфона, работающего на платформе Android. Всего через несколько дней Google анонсировала выход Android SDK Release Candidate 1.0.
В октябре 2008 года Google открыла доступ к исходному коду платформы Android в соответствии со свободной лицензией Apache.
Когда Android вышла в свет, одной из основных целей для ее архитектуры было обеспечить возможность взаимодействия приложений и использования компонентов одних приложений другими. Такое повторное применение касалось не только служб, но и данных, а также пользовательского интерфейса (UI). В результате платформа Android включила в себя некоторые архитектурные характеристики, которые позволили воплотить такую открытость в реальности. Некоторые из этих характеристик будут подробно рассмотрены в главе 3.
Android быстро привлекла к себе внимание, так как в ней имелись возможности, позволявшие в полной мере использовать модель облачных вычислений, которые применяются на веб-ресурсах, и этот опыт был усовершенствован при помощи локальных хранилищ данных, расположенных на самом мобильном устройстве.
Поддержка реляционной базы данных на мобильных устройствах с Android также посодействовала быстрому признанию этой операционной системы.
В начале 2008 года Google выпустила мобильное устройство под названием Android Dev Phone 1, на котором можно было использовать программы Android, находясь вне зоны действия какой-либо мобильной сети. Это устройство (стоившее около $400) должно было позволить разработчикам проводить эксперименты с настоящими устройствами, на которых Android можно было использовать, не заключая никаких договоров. Примерно в то же время Google выпустила исправленную версию ОС под номером 1.1, которая была полностью основана на версии 1.0.
В версиях 1.0 и 1.1 Android не поддерживала виртуальную клавиатуру, требовалось устройство, на котором были бы настоящие клавиши. Эта проблема была устранена в апреле 2009 года, когда вышел комплект SDK 1., в котором появились и другие возможности, например продвинутые функции записи медиаданных, виджеты и живые каталоги (живые каталоги будут рассмотрены в главе 12, а виджеты — в главе 13).
В сентябре 2009 вышла версия Android 1.6, а через месяц за ней последовал Android 2.0, поддержавший бурные продажи устройств Android в рождественский Глубокий анализ Dalvik VM сезон 2009 года. В этом релизе появились улучшенные поисковые возможности и функция преобразования текста в речь. (О синтезаторах речи мы поговорим в главе 1, а о поиске в Android — в главе 14.) В этом релизе появилась также поддержка управления жестами и функция мультитач. Эти вопросы рассмотрены в главе 16.
Android 2.0 поддерживает HTML, благодаря чему в нем появляются интересные функции. Новые возможности программирования описаны в главе 17, где мы рассмотрим Titanium Mobile. Каждый день появляются все новые приложения для Android, а также независимые онлайновые хранилища приложений. Эти хранилища приложений, а также управляемый Google онлайн-сервис Android Market, описаны в главе 18. В главе 19 мы проанализируем, насколько сильны позиции Android в сфере мобильных устройств.
Глубокий анализ Dalvik VM В ходе работы с Android специалисты Google много внимания уделили возможностям оптимизации дизайна маломощных мобильных устройств. Мобильные устройства отстают от локальных компьютеров в области памяти и скорости обработки информации на восемь-десять лет. Вычислительные возможности мобильных устройств также ограниченны; общая оперативная память мобильного устройства может составлять всего 64 Мбайт, а пространство, на котором можно разместить приложения, может быть и того меньше — около 20 Мбайт.
В результате эксплуатационные требования к мобильным устройствам ужесточаются, заставляя разработчиков оптимизировать все, что только можно. Если просмотреть список пакетов для Android, становится понятно, что все они являются полнофункциональными, с широкими возможностями. По данным Google, эти системные библиотеки используют от 10 до 20 Мбайт памяти, даже при применении оптимизированной виртуальной машины Java.
По этим причинам Google пришлось во многих отношениях переработать стандартную версию JVM. (Основным специалистом Google, отвечающим за новую версию JVM является Дэн Борнштейн (Dan Bornstein), написавший виртуальную машину Dalvik VM; Дальвик — это небольшой город на севере Исландии.) Во-первых, Dalvik VM использует сгенерированные Java файлы классов и комбинирует их в один или несколько исполняемых файлов Dalvik (DEX). Машина повторно использует повторяющуюся информацию из нескольких файлов классов, эффективно снижая потребность в пространстве и занимает (без архивации) вполовину меньше места, чем обычный файл JAR. Например, файл DEX мобильного браузера, используемого в Android, имеет размер около 200 Кбайт, а аналогичный файл JAR без архивации занимает около 00 Кбайт. Файл DEX программыбудильника занимает 0 Кбайт, а версия JAR — без малого в два раза больше.
Во-вторых, Google тонко настроила в Dalvik VM процесс сборки мусора (garbage collection), но в ранних версиях было решено обойтись без динамического компилятора (JIT). Насколько можно судить, в коде версии 2.0 содержатся все необхоJIT).
димые источники для компилятора JIT, но в окончательной версии эти источники неактивированы. Ожидается, что они появятся в следующих релизах. Такой выбор оправдан, так как многие корневые библиотеки Android, в том числе графические, написаны на С и C++. Например, графические интерфейсы прикладного программирования для Java являются тонкими классами-обертками, в которых заключен нативный код, использующий собственный интерфейс Java (Java Native Interface).
Подобным образом в Android предоставляется оптимизированная нативная библиотека на базе C для доступа к базе данных SLite, но эта библиотека инкапсулирована в высокоуровневом интерфейсе прикладного программирования (API) для Java. Поскольку большая часть корневого кода написана на С и С++, специалисты Google сочли, что компилирование JIT не очень повлияет на работу системы.
Наконец, в Dalvik VM используется иной вид генерирования ассемблерного кода, в ходе которого в качестве основных элементов хранения данных используются реестры, а не стек. Таким образом, Google рассчитывает сократить количество команд на 30 %. Следует отметить, что конечный исполняемый код в Android, получаемый после обработки Dalvik VM, основан не на байт-коде Java, а на файлах DEX. Это означает, что вы не сможете непосредственно выполнять байт-код Java;
вам придется запустить файлы классов Java, а затем преобразовать их в готовые связываемые файлы DEX.
Такое настойчивое стремление оптимизировать эксплуатационные характеристики наблюдается во всех частях инструментария для разработки в Android.
В частности, в Android SDK для определения пользовательских интерфейсов широко применяется XML. Но весь этот XML скомпилирован в двоичные файлы, которые затем становятся резидентными файлами мобильных устройств.
В Android предусмотрены специальные механизмы для использования XMLданных. Поскольку мы рассматриваем вопросы дизайна Android, нам необходимо ответить на вопрос: чем похожи и чем различаются Android и платформа Java Micro Edition (Java ME)?
Сравнение Android и Java ME Как мы уже увидели, в Android используется комплексный, целенаправленный и сфокусированный подход к созданию мобильной платформы, а для этого недостаточно обычных решений, основанных на JVM. В Android все, что вам нужно, — операционная система, драйверы устройств, библиотеки ядра, собственный интерфейс Java, оптимизированная версия Dalvik VM и среда разработки Java — находится в одном пакете. Разработчик может быть уверен, что при разработке нового приложения все основные библиотеки будут на мобильном устройстве.
Такой комплексный подход отличается от других решений, используемых в программировании для мобильных устройств, например от Java ME. Кратко рассмотрим Java ME, а потом сравним оба подхода. На рис. 1.4 показана доступность Java для различных конфигураций вычислительных машин. Стандартная версия платформы Java (Java SE) подходит для персональных компьютеров и рабочих станций. Корпоративная версия платформы Java (Java EE) разработана для серверов.
Сравнение Android и Java ME Рис. 1.4. Конфигурация Java для различных вычислительных машин Микроверсия платформы Java (Java ME) является сокращенной и предназнаJava ) чена для небольших устройств. Java ME доступна в виде двух вариантов конфигурации. Первый вариант называется «конфигурация коммуникационных устройств»
(Connected Device Configuration, CDC). Java ME для CDC содержит упрощенную версию Java SE — с меньшим количеством пакетов, с меньшим количеством классов в них, и даже с меньшим количеством методов и полей в этих классах. Для оборудования и устройств, имеющих дополнительные ограничения, в Java применяется конфигурация для устройств с ограниченными ресурсами ( Connected Limited Device Configuration, CLDC). Существующие интерфейсы прикладного программирования для различных конфигураций Java сравниваются на рис. 1..
Любые дополнительные пакеты, устанавливаемые «поверх» основного интерфейса прикладного программирования с конфигурацией CDC или CLDC, счи-, таются «профилями», которые стандартизируются процессом JSR (запрос на спецификацию Java). Каждый заданный профиль предоставляет разработчику дополнительный набор интерфейсов прикладного программирования.
ВНИМАНИе И CDLC, и CDC могут поддерживать некоторые интерфейсы прикладного программирования Java, не входящие в Java SE, а их классы могут не начинаться с пространства имен *java. Следовательно, если у вас есть программа на Java, работающая на локальном компьютере, она может не сработать на устройствах, на которых поддерживается только микроверсия.