» Платформа Android. Краткое введение для разработчиков. Новости. . . Блог программистов


Блог программистов






201010 Янв

Платформа Android. Краткое введение для разработчиков.

Данную мини-статью я бы хотел посвятить платформе Android. Меня уже давно интересовала эта система и недавно я стал обладателем замечательного коммуникатора HTC Hero, что позволило мне плотно заняться изучением этой платформы. В этом обзоре я постараюсь кратко изложить основы Android, надюсь статья будет полезна тем кто интересовался андроидом, но боялся спросить


Итак, как известно Android представляет собой мобильную платформу на основе ядра Linux. Основа, казалось бы, обнадеживает, но Linux разработчикам не стоит сильно обольщаться, ниже будет рассказано почему.
Посмотрим из каких компонентов состоит система

Ядро
На самой нижней ступени иерархии расположено ядро Linux. В Android используется 2.6. ветка, а конкретно в моем устройстве — ядро версии 2.6.27, т.е. достаточно свежее. Данное ядро представляет собой несколько урезанную версию обычного ядра. Основное его назначение здесь: драйвера устройств, управление памятью/энергосистемой, а так же запуск всех остальных процессов.

Библиотеки
libc — эта библиотека представляет собой BSD реализацию стандартной библиотеки C, носит название Bionic и является несовместимой с таковой в «обычном» Linux
Media Framework — эта библиотека предоставляет поддержку для воспроизведения различных аудио/видео форматов, а так же графических изображений
Surface Manager — эта библиотека служит для доступа к подсистеме дисплея и выполняет «безшовный» компоузинг 2D и 3D изображений из различных приложений.
LibWebCore — движок браузера.
SGL — движок 2D графики.
3D libraries — имплементация OpenGL ES 1.0 APIs
FreeType — рендер битмапов и векторных шрифтов.
SQLite — движок баз данных.
SSL — библиотека шифрования.

Android runtime
На данном уровне располагается «сердце» всей системы — виртуальная Java машина Dalvik, оптимизированная на работу в мобильных устройствах. Данная виртуальная машина не является совместимой, на байт-кодовом уровне, с другими Java машинами. Core libraries предоставляют основной низкоуровневый Java функционал. Следует отметить, что каждое новое приложение запускается со своим экземпляром виртуальной машины, вследствие чего все процессы максимально изолированы друг от друга и от операционной системы.

Application framework
Этот уровень предоставляет множество вспомогательных компонент, такие как менеджер окон, менеджер уведомлений, менеджер ресурсов и др.

Applications
На самом верхнем уровне находятся все приложения, таки как медиаплеер, браузер, записная книжка, номеронабиратель. Примечательно, что каждый из этих компонент, несмотря на кажущуюся интегрированность, могут быть заменены на свои. Например можно установить свою программу для приема и отправки смс, вместо стандартной.

Операционная система устанавливается на внутренние флеш-накопители устройств, файловая система — ext2. Сменные карты памяти, как правило, отформатированы в файловую систему FAT, вследствие чего (и возможно еще ряда факторов) установка приложений невозможна (на самом деле все возможно, но для этого требуется дополнительное шаманство над прошивкой и создание ext2 раздела на флешке) на карту памяти. А объем же встроенной памяти не велик (в моем аппарате для установки приложений доступно приблизительно 160 мегабайт), это является очень важным, как для разработчиков, так и для пользователей, фактором. Обычные Android приложения «весят» 100-200 килобай, самое «тяжелое» приложение, попадавшееся мне, — 3D гонки, размером 3 мегабайта.
Файловая система скрыта от пользователя, но с помощью сторонних приложений ее можно увидеть. Вот какая картина нам открывается:

/ —
/cache
/data
/dev
/etc
/root
/sbin
/sdcard
/sqlite_stmt_journals
/sys
/system
default.prop
init
init.goldfish.rc
init.rc
logo.rle

Как видим — присутствует большинство каталогов, которые можно найти в обычных Linux системах. Наибольший интерес представляют:
/dev — здесь, как и положено, содержатся файлы устройств, в частности ttyHSO — WCDMA/HDSPA модем, smd0 — GPRS/EDGE модем, ttyMSM0 — bluetooth модуль, qmi0 — wifi модуль.
/etc — каталог файлов конфигурации, в наличии конфиги для dhcp демона, iproute, permissions, wpa_supplicant, hosts,
/proc — здесь все аналогично другим Linux, запущенные процессы, состояние устройств, в частности можно заглянуть в cpuinfo и прочесть все о процессоре устройства.
/sdcard — это точка монтирования съемного флеш накопителя.
/sys — аналогично другим Linux
/system — здесь находится сама система Android, Dalvik, сюда, в каталог /app, устанавливаются приложения, сюда же помещены каталоги /usr, /lib (удалось найти такие библиотеки как libcurl, libdbus и множество других), /fonts
Отдельного внимания заслуживает init.rc — это скрипт загрузки системы, в нем прописа запуск всех сервисов. Скрипт аналогичен, по функциям, init.d системе других Linux. init — тот самый инит, родитель всех остальных процессов.

На этом заканчивается Linux. Как уже говорилось — приложения Android являются программами на языке Java. Специально для разработки приложений существует бесплатное, кроссплатформенное SDK, которое превосходно интегрируется с Eclipse IDE. В состав SDK входят: документация, java классы, вспомогательные утилиты, например полноценный эмулятор.
Начиная с версии 1.5 (текущая 2.1) в Android разрешается писать на языке С, с помощью так называемого native development kit, которое так же распространяется бесплатно. Но данная возможность не предназначена для разработки полноценных Android приложений. Подразумевается, что C код должен применяться в критичных областях, для увеличения производительности, аналогично, как и Assembler в самом C. При этом C код собирается в .so библиотеку и загружается в Java код с помощью особых вызовов.
Довольно интересной особенностью Android приложений является отсутствие точки входа, приложение может начинаться из различных точек, в зависимости от различных факторов. Еще одна интересная особенность — одно приложение может внедрять в себя код другого приложения (если такая возможность была разрешена разработчиком) для приобретения какого либо функционала. Например, приложение A имеет некий custom ui control, а приложение B его не имеет, но очень хочет заполучить. Тогда приложение B подключает к себе код, отвечающий за этот control и использует как родной.
На Android существуют как обычные приложения, с графическим интерфейсом (они называются Activites), так и фоновые службы (Services), не имеющие своего интерфейса. Операционная система предоставляет методы для межпроцессного обмена информацией, это работает на Java уровне, к слову, по заверениям разработчиков Android, обычное Linux IPC (shered memory, semaphores) отключено на уровне ядра.
Таким образом мы имеем хорошо изолированную Java систему, обладающую всем необходимым для полноценной ос: network managment, ipc, ui classes, threads и еще огромное множество других классов на все случаи жизни. Обычные приложения не подозревают о том, что существует ниже уровня Dalvik и не могут взаимодействовать непосредственно с Linux. Точно также и наоборот. Весь графический интерфейс, в Android, строится на основе XML описания.
Отдельно хочется сказать о том, как реализована многозадачность. Как я уже говорил выше, приложения можно разделить на Activites и Services. Первый тип приложений, при сворачивании, или переходе на другое приложение, приостанавливается и свопится на диск (встроенный флеш накопитель). Таким образом освобождается память и ресурсы для другого приложения. При вызове свернутого приложения операционная система восстанавливает его из свопа и продолжает с того же места. В связи с этим приложение может развернутся и продолжить работа не так быстро, как если бы его только запустили. Services же никогда не сбрасываются на диск и всегда «висят», фоново, в памяти. Следует отметить, что при критической нехватке памяти, Android может «убивать» пользовательские приложения.
Обычные аппараты, а так же эмулятор, не имеют root полномочий, в связи с этим возможности разработчиков несколько ограничены: невозможно получить полный доступ к системе, к Linux, в частности. Существует два решения этой проблемы:
Android Dev Phone (http://developer.android.com/intl/fr…ng/device.html) — это аппарат с полностью разблокированной прошивкой и полными root полномочиями. Устройство создано специально для разработчиков, которым требуется более глубокий уровень вхождения в систему. Приобрести аппарат может только после регистрации в Android market, как разработчик. Регистрация стоит $25 и не доступна в Украине. Зарегистрироваться и приобрести аппарат могут только жители следующих стран: США, Великобритания, Германия, Япония, Индия, Канада, Франция, Тайвань, Испания, Австралия, Сингапур, Швейцария, Нидерланды, Австрия, Швеция, Финляндия, Польша и Венгрия. Цена самого аппарата — $399
Второй путь — это хак обычной прошивки, в интернете имеются подробные мануалы, как осуществить подобную манипуляцию и получить root привилегии.

А как происходит установка приложений на аппарат?
В данном случае всего три варианта:
1. Android market — это онлайн магазин платных и бесплатных приложений, недоступный, например, для жителей Украины (даже для загрузки бесплатных приложений), для России такого ограничения, насколько я знаю, нет. В тех странах, где маркет доступен, Android аппараты оснащаются специальным приложением, позволяющем легко искать и загружать необходимый софт. Это основной способ установки Android приложений. Понятно, что другими способами устновки приложений пользователи из этих стран заморачиваться не будут.
2. Предустановленные приложения и сервисы. Данные приложения устанавливаются вендором устройства/опеатором, часто имеют root привелигии, соответственно обычный пользователь не может их удалить.
3. Последний способ, я считаю его способом энтузиастов и гиков В данном случае приложение ставится непосредственно из инсталляционного пакета (.apk) Для установки есть несколько вариантов — использовать специальную Windows only утилиту с графическим интерфейсом (пролетают пользователи православных осей) либо же использовать консольную утилиту adb из SDK. К счастью существует специальное Android приложение (App installer), умеющее устанавливать другие приложения. Поэтому достаточно один раз установить App installer, а потом просто заливать программы на флеш накопитель и устанавливать через утилиту. Важный момент, для успешной установки приложений необходимо активировать, в настройках аппарата, режим отладки USB и разрешить установку из «левых» источников.

Android — молодая и активно развивающаяся платформа. И как это обычно бывает в таких случаях — пока очень мало статей и уроков на русском языке, а переведенных книг вообще нет. Но тем не менее я хотел бы посоветовать две книги (на английском языке):
McGraw Hill — Android a programmers guide.
Reto Meier — Professional Android application development.

Еще хотелось бы поделиться этой ссылкой. Очень хорошие и интересные статьи. Ну и конечно же официальный сайт разработчиков.

Успехов в освоении!

Комментарии

  1. 31 марта, 2010 | 15:10

    Блин завидую белой завистью, так хочется «пощупать» HTC на Android…
    Просто интересует разработка под эту систему, хотелось бы заняться, но пока нет денег на аппарат 🙁
    Спасибо за статью, а то искал нечто похожее — не находил 🙁 А тут доступно и понятно все расписано и что самое главное рассказан принцип действия и работы системы.

  2. 7 мая, 2010 | 13:29

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

  3. 3 июня, 2010 | 21:25

    Друг недавно приобрел samsung с android, будем вместе разбираться.

  4. Михаил
    13 июля, 2010 | 18:00

    Купил китайские устройства под андроидом. Взял андроидный китайский АйФон и АйПад.
    Всё работает отлично. Для разработчиков больше и не нужно. И должен признать сборка устройства достаточно хорошая.

  5. 8 августа, 2010 | 17:44

    В чем проблема попробовать прогрмировать? наличия устройства андроид для пробы необязательно.
    на эмуляторе все прекрасно работает.

  6. moroz-ilnik
    2 марта, 2011 | 15:20

    Эх, как хорошо, что купил HTC HD2, винда надоела и скучна, а умельцы сделали сперва порт андроида и теперь и прошивка на андроид есть и их куча на любой вкус. Работает ВСЁ, кроме видеозаписи 720р, но оно и не надо, 800х480 30 кадров- супер. Даже Windows Phone 7 прошивки есть. и даже какой то юбунтуч чтоль… Супер коммуникатор, 4 операционки мона пощупать и пользоваться. Но андроид пока супер.

  7. AlexNikolya
    2 декабря, 2012 | 04:08

    Очень хорошая статья, познавательно и доходчиво! огромное вам спасибо! от новичка.

  8. Natali
    23 октября, 2013 | 17:41

    Да вот только на андроиде не очень безопасно скачивать((( вот вирус поймала на планшет. нашла статью и правда в России вирусы для андроид наиболее распространены http://techtimes.ru/virusy-android-rasprostraneny-v-rossii.html