Файловые системы Android. Где хранятся данные приложений android

Android is an open source, Linux-based software stack created for a wide array of devices and form factors. The following diagram shows the major components of the Android platform.

Figure 1.

The Linux Kernel

The foundation of the Android platform is the Linux kernel. For example, relies on the Linux kernel for underlying functionalities such as threading and low-level memory management.

Using a Linux kernel allows Android to take advantage of and allows device manufacturers to develop hardware drivers for a well-known kernel.

Hardware Abstraction Layer (HAL)

Android also includes a set of core runtime libraries that provide most of the functionality of the Java programming language, including some Java 8 language features , that the Java API framework uses.

Native C/C++ Libraries

Many core Android system components and services, such as ART and HAL, are built from native code that require native libraries written in C and C++. The Android platform provides Java framework APIs to expose the functionality of some of these native libraries to apps. For example, you can access OpenGL ES through the Android framework’s Java OpenGL API to add support for drawing and manipulating 2D and 3D graphics in your app.

If you are developing an app that requires C or C++ code, you can use the Android NDK to access some of these native platform libraries directly from your native code.

Java API Framework

The entire feature-set of the Android OS is available to you through APIs written in the Java language. These APIs form the building blocks you need to create Android apps by simplifying the reuse of core, modular system components and services, which include the following:

  • A rich and extensible View System you can use to build an app’s UI, including lists, grids, text boxes, buttons, and even an embeddable web browser
  • A , providing access to non-code resources such as localized strings, graphics, and layout files
  • A Notification Manager that enables all apps to display custom alerts in the status bar
  • An Activity Manager that manages the lifecycle of apps and provides a common navigation back stack
  • Content Providers that enable apps to access data from other apps, such as the Contacts app, or to share their own data

Developers have full access to the same framework APIs that Android system apps use.

System Apps

Android comes with a set of core apps for email, SMS messaging, calendars, internet browsing, contacts, and more. Apps included with the platform have no special status among the apps the user chooses to install. So a third-party app can become the user"s default web browser, SMS messenger, or even the default keyboard (some exceptions apply, such as the system"s Settings app).

The system apps function both as apps for users and to provide key capabilities that developers can access from their own app. For example, if your app would like to deliver an SMS message, you don"t need to build that functionality yourself-you can instead invoke whichever SMS app is already installed to deliver a message to the recipient you specify.

Реферат

Архитектура платформы Google Android

Введение

Android - это программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного слоя (middleware) и основные пользовательские приложения (e-mail-клиент, календарь, карты, браузер, контакты и др.).

Вопреки распространенному мнению, Android установлен не только на планшетах и смартфонах, но и на электронных книгах, цифровых проигрывателях, наручных часах, нетбуках и даже очках Google.

Эта платформа является самой популярной на рынке: она установлена на 68% устройств. Число программ в магазине приложений Google Play превышает 600 000 единиц. За всё время работы магазина было выполнено 20 млрд установок приложений. Согласно заявлениям Энди Рубина - руководителя разработки Android в Google - ежедневно в мире активируется 1.3 млн Android-устройств.

Эти данные и побудили меня исследовать вопрос об архитектуре платформы.

Архитектура Android

Рисунок 1. Структура платформы Google Android

Архитектура Google Android состоит из четырех уровней (нумерация обозначает порядок уровней снизу вверх).

)Ядро OS Linux версии 2.6 обеспечивает функционирование системы. Оно отвечает за безопасность, управление памятью, энергосистемой и процессами, а также предоставляет сетевой стек и модель драйверов. Кроме того, оно играет связующую роль между аппаратным обеспечением и остальной частью программного стека.

)Программное обеспечение промежуточного слоя - набор библиотек (Libraries), предназначенный для обеспечения важнейшего функционала для приложений.

Вот некоторые из них:

·Surface Manager - композитный менеджер окон. Вместо того, чтобы отрисовывать графику в буфер дисплея, система посылает поступающие команды отрисовки в закадровый буфер, где они накапливаются вместе с другими, составляя некую композицию, а потом выводятся пользователю на экран. Это позволяет создавать интересные бесшовные эффекты, прозрачность окон и плавные переходы.

·Media Framework - библиотеки, реализованные на базе PacketVideo OpenCORE. С их помощью система осуществляет запись / воспроизведение аудио- и видео - контента, а также вывод статических изображений. Поддерживаются форматы MPEG4, H.264, MP3, AAC, AMR, JPG и PNG и др.

·SQLite - реляционная СУБД, используемая в Android в качестве основного движка для работы с базами данных, используемыми приложениями для хранения информации.

·3D библиотеки - используются для отрисовки 3D-графики, при возможности используют аппаратное ускорение. Реализуются на основе API OpenGL ES 1.0.

·FreeType - библиотека для работы для растеризации шрифтов и осуществления операций над ними.

·LibWebCore - библиотеки браузерного движка WebKit.

·Libc - стандартная библиотека языка C, настроенная для работы на устройствах на базе Linux.

Все библиотеки написаны на языке C++ и скомпилированы под конкретное аппаратное обеспечение устройства.

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

Каждое приложение в Android Runtime запускается в собственном экземпляре виртуальной машины Dalvik. То есть, все работающие процессы изолированы от операционной системы и друг от друга. Особенность структуры Android Runtime позволяет осуществлять работу программ строго в рамках виртуальной машины. Благодаря этому ядро операционной системы защищено от влияния со стороны других компонентов. Код с ошибками или вредоносное ПО не смогут испортить систему или само устройство. Функция защиты, кроме непосредственного выполнения программного кода, является одной из ключевых для этого уровня.

3)Следующий уровень - Application Framework, или каркас приложений. Именно через каркасы приложений разработчики получают доступ к API, предоставляемым компонентами системы, лежащими ниже уровнем. Кроме того, благодаря архитектуре фреймворка, любому приложению предоставляются уже реализованные возможности других приложений, к которым разрешено получать доступ.

В базовый набор сервисов и систем, лежащих в основе каждого приложения и являющихся частями фреймворка, входят:

·Богатый и расширяемый набор представлений (Views ), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.

·Контент-провайдеры (Content Providers ), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.

·Менеджер ресурсов (Resource Manager ), обеспечивающий доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.

·Менеджер оповещений (Notification Manager ), благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.

·Менеджер действий (Activity Manager ), который управляет жизненными циклами приложений, сохраняет данные об истории работы с действиями, а также предоставляет систему навигации по ним.

·Менеджер местоположения (Location Manager ), позволяющий приложениям периодически получать обновленные данные о географическом положении устройства.

Таким образом, приложения в ОС Android могут получать в своё распоряжение вспомогательные инструменты.

Отличия фреймворка от библиотеки

·Фреймворк только выполняет код, написанный для него, библиотеки исполняются сами.

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

4)Уровень Applications. Сюда относятся базовые программы, предустановленные на Android. Это браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. Также на этом уровне располагается стороннее ПО. Система позволяет устанавливать его без ограничений, поэтому все стандартные приложения могут быть заменены аналогами. Приложения для Android пишутся на языке Java.

Заключение

android программа пользовательский операционный

Особенности архитектуры платформы Google Android позволили ей выйти на первое место среди других платформ. Главные из них:

)Регистр-ориентированная виртуальная машина Dalvik для выполнения приложений.

)Инновационные библиотеки, значительно расширяющие функционал устройств.

)«Легковесная» СУБД SQLite для хранения данных.

)Возможность поддержки 3D и 2D графики, и даже комбинирования их в одном приложении.

)Многозадачность и изолированность процессов друг от друга.

)Универсальность архитектуры наряду с высоким качеством.

Список источников

1.Голощапов А.Л. Google Android: системные компоненты и сетевые коммуникации. - СПб.: БХВ-Петербург, 2012. - 384 c.

2.Фелкер Д. Android: разработка приложений для чайников. - М.: Диалектика, 2012. - 336 с.

3.Хашими С., Коматинени С., Маклин Д. Разработка приложений для Android. - СПб.: Питер, 2011. - 736 с.

В этой статье мы рассмотрим архитектуру Android-приложений.

Откровенно говоря, официальную Google по этой теме я считаю не очень полезной. Детально отвечая на вопрос «как», она совсем не объясняет «что» и «почему». Итак, вот моя версия, и, я надеюсь, она внесёт некоторую ясность. Да, кстати, я полностью одобряю чтение статей Google, поскольку они содержат полезную информацию, повторять которую я не собираюсь.

Архитектура ОС Android - немного истории

Как это часто бывает в IT, многие вещи не могут быть объяснены в отрыве от истории возникновения конкретного программного обеспечения. Вот почему мы должны обратиться к истокам ОС Android.

Разработка ОС Android была начата в 2003 молодой компанией Android Inc. В 2005 году эта компания была куплена Google. Я считаю, что главные особенности архитектуры Android были определены именно в этот период. Это заслуга не только Android Inc; архитектурные концепции и финансовые ресурсы Google оказали решающее влияние на архитектуру Android. Далее я приведу несколько примеров.

Если вы помните, 2003-2005 года были ознаменованы повышенным вниманием к AJAX приложениям. Я думаю, это оказало основополагающее влияние на архитектуру Android: во многих аспектах она ближе к архитектуре типичного AJAX приложения, нежели к десктопному GUI приложению, написанному на Java, C#, C++, VB и тп.

Не знаю, почему так произошло. Моя догадка - это придумал кто-то из Google в тот период, когда насыщенные интернет-приложения (Rich Internet Applications, RIA) в духе Google Docs или Gmail считались решением всех проблем. По-моему, эту идею нельзя назвать ни плохой, ни хорошей. Просто помните, что Android-приложения очень сильно отличаются от десктопных.

Влияние архитектурной философии Eclipse заметно в выборе принципа реализации GUI, который больше похоже на SWT, нежели на Swing.

В стандартах оформления кода Android присутствует «венгерская нотация», рождённая в стенах MS. Можно предположить, что тот, кто писал эти стандарты, ранее занимался разработкой под Windows.

Архитектурные уровни Android
Операционная система Android имеет три весьма различных и сильно отделённых друг от друга уровня:
  1. В основе лежит модифицированная и урезанная версия Linux, как я и упоминал в одной из моих предыдущих статей .
  2. Над уровнем Linux находится уровень инфраструктуры приложения, содержащий виртуальную машину Dalvik , веб-браузер, базу данных SQLite , некие инфраструктурные «костыли» и Java API.
  3. И, наконец, уровень написанных в Google Android-приложений. Вообще говоря, они являются расширением уровня инфраструктуры, поскольку разработчик может использовать эти приложения или их части как строительные блоки для собственных разработок.
Рассмотрим эти слои один за другим и более подробно.

Уровень Linux

Представьте себе, что вы - архитектор в молодой компании. Вы должны разработать ОС для нового типа устройств. Что вы будете делать?

Грубо говоря, у вас два пути: реализовывать собственные идеи, начав с нуля или же использовать существующую ОС и адаптировать её под свои устройства.

Реализация с нуля всегда звучит захватывающе для программистов. В эти моменты мы все верим в то, что в этот раз мы всё сделаем лучше, чем делают другие, и даже лучше, чем мы сами делали ранее.

Тем не менее, это не всегда практично. Например, использование ядра Linux заметно уменьшило стоимость разработки (возможно где-то и без того чрезмерно большую). Согласитесь, если кто-то решит создать нечто, напоминающее ядро Linux в его сегодняшнем состоянии, ему потребуется несколько миллионов долларов.

Если вы руководите Android Inc, то у вас по определению не может быть столько денег. Если вы руководите Google, то у вас такие деньги найдутся, но вы, скорее всего, подумаете дважды, прежде чем потратить их на создание собственной ОС. Так же вы потратите несколько лет, прежде чем достигните сегодняшнего состояния Linux; несколько лет задержки могут стать слишком большим опозданием при выходе на рынок.

В подобной ситуации компания Apple решила построить Mac OS на основе Free BSD. Android Inc приняла решение использовать Linux как основу для Android. Исходники как Free BSD, так и Linux, находятся в свободном доступе и предоставляют собой хорошую основу для любых разработок, будь то Apple или Google.

Но в то время запустить стандартный Linux на мобильном устройстве было невозможно (сейчас это уже не так). Устройства имели слишком мало оперативной и энергонезависимой памяти. Процессоры были значительно медленнее по сравнению с процессорами компьютеров, где обычно используется Linux. Как результат, разработчики Android решили минимизировать системные требования Linux.

Если рассматривать Linux на высоком уровне, то это комбинация ядра (без которого нельзя обойтись) и множества других, необязательных частей. Можно даже запустить одно ядро, без чего бы то ни было ещё. Так, Google вынуждена в любом случае использовать ядро Linux как часть ОС Android. Кроме того, были рассмотрены необязательные части и из них выбрано самое необходимое. Например, были добавлены сетевой фаервол IPTables и оболочка Ash. Любопытно, что добавили именно Ash, а не Bash, не смотря на то, что последний на порядок мощнее; вероятно, это решение было основано на том, что Ash менее требователен к ресурсам.

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

Выбор Linux в качестве основы оказал огромное влияние на все аспекты ОС Android. Сборка Android, по сути, есть вариация процесса сборки Linux. Код Android находится под управлением git (инструмент, разработанный для управления кодом Linux). И так далее.

Пускай это всё и интересно, но вы, скорее всего, никогда не коснётесь всех этих специфических моментов до тех пор, пока ваша цель просто разработать приложения под Android. Исключение может составить разве что обзор файловой системы с помощью команд ash. Главное, что вы должны знать, разрабатывая приложения под Android - это уровень инфраструктуры приложения.

Вы можете спросить, как же быть, если необходимо разработать нативное приложение для Android? Google настоятельно не рекомендует делать этого. Технически, конечно, это возможно, но в дальнейшем у вас не будет возможности распространять это приложение нормальным способом. Так что подумайте дважды, прежде чем начать нативную разработку под Android, если конечно, вы не работает над Android Open Source Project (AOSP), т.е. собственно ОС Android.

Уровень инфраструктуры приложения

Несмотря на некоторое сходство Apple iOS и Android ОС, существуют значительные отличия между архитектурными решениями на инфраструктурном уровне обоих ОС.

Apple решила использовать Objective-C как язык программирования и среду выполнения приложения iOS. Objective-C выглядит более или менее естественным выбором для ОС, в основе которой лежит Free BSD. Можно рассматривать Objective-C как обычный C++ с кастомным препроцессором, который добавляет некоторые специфические лингвистические конструкции. Почему же нельзя использовать стандартный C++, на котором написана Free BSD? Мне кажется причина в том, что Apple старается всё делать в своём, «эппловском» стиле.

Основная идея в том, что приложения iOS написаны более или менее на том же языке, что и стоящая за ними ОС.

Android-приложения сильно отличаются в этом смысле. Они написаны на Java, а это совсем другая технология, нежели C++ (хотя синтаксис и унаследован от C++).

Я думаю, основная причина состоит в необходимости одному и тому же приложению работать на различном аппаратном обеспечении. Эта проблема имеет место лишь для ОС Android; у ребят из Apple такой проблемы нет. iOS работает только на оборудовании собственного производства, и Apple полностью контролирует весь процесс. Для Android же всё наоборот: Google не контролирует производителей аппаратных средств. Например, ОС Android работает на процессорах с архитектурой x86, ARM и Atom (в комментах подсказывают, что x86 включает в себя Atom, и Android работает на x86, ARM, PPC и MIPS - примечание переводчика ). На бинарном уровне эти архитектуры несовместимы.

Если бы архитекторы ОС Android выбрали тот же путь, что и архитекторы из Apple, разработчики приложений под Android были бы вынуждены распространять несколько версий одного и того же приложения одновременно. Это стало бы серьёзной проблемой, которая могла бы привести к краху всего проекта Android.

Для того, чтобы одно и то же приложение могло работать на разном аппаратном обеспечении, компания Google использовала контейнер-ориентированную архитектуру (container-based architecture). В такой архитектуре двоичный код выполняется программным контейнером и изолируется от деталей конкретного аппаратного обеспечения. Примеры всем знакомы - Java и C#. В обоих языках двоичный код не зависит от специфики аппаратного обеспечения и выполняется виртуальной машиной.

Конечно, есть и другой способ достигнуть независимости от аппаратного обеспечения на уровне двоичного кода. Как один из вариантов, можно использовать эмулятор аппаратного обеспечения, так же известный как QEMU . Он позволяет эмулировать, например, устройство с процессором ARM на платформе x86 и так далее. Google могла бы использовать C++ как язык для разработки приложений внутри эмуляторов. Действительно, Google использует такой подход в своих эмуляторах Android, которые построены на основе QEMU.

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

Как бы то ни было, компания Google пришла к решению использовать Java как основной язык разработки приложений и среды их выполнения.

Я думаю, это было критически важное архитектурное решение, которое поставило Android в стороне от остальных мобильных ОС на основе Linux, представленных в настоящее время. Насколько мне известно, ни у одной из них нет совместимости двоичного кода на уровне приложений. Возьмём для примера MeeGo . Она использует C++ и фреймворк Qt ; не смотря на то, что Qt кроссплатформенный, необходимость делать разные сборки для разных платформ не исчезает.

Выбрав Java, нужно было решить, какую виртуальную машину (JVM) использовать. Ввиду ограниченности ресурсов использование стандартной JVM было затруднено. Единственным возможным выбором было использование Java ME JVM, разработанной для мобильных устройств. Однако счастье Google было бы неполным без разработки собственной виртуальной машины, и появилась Dalvik VM .

Dalvik VM отличается от других виртуальных Java-машин следующим:

  • Она использует специальный формат DEX для хранения двоичных кодов, в противовес форматам JAR и Pack200, которые являются стандартом для других виртуальных Java-машинах. Компания Google заявила, что бинарники DEX меньше, чем JAR. Я думаю, с тем же успехом они могли бы использовать Pack200, но они решили пойти своим путём.
  • Dalvik VM оптимизирована для выполнения нескольких процессов одновременно.
  • Dalvik VM использует архитектуру, основанную на регистрах против стековой архитектуры в других JVM, что приводит к увеличению скорости выполнения и уменьшению размеров бинарников.
  • Она использует собственный набор инструкций (а не стандартный байткод JVM)
  • Возможен запуск (если необходимо) нескольких независимых Android-приложений в одном процессе
  • Выполнение приложения может охватывать несколько процессов Dalvik VM «естественным образом» (позже мы обсудим, что это значит). Для поддержи этого добавлено:
    • Специальный механизм сериализации объектов, основанный на классах Parcel и Parcelable. Функционально преследуются те же цели, что и Java Serializable, но в результате данные имеют меньший объём и потенциально более терпимы к версионным изменениям классов.
    • Особый способ для выполнения вызовов между процессами (inter process calls, IPC), основный на Android Interface Definition Language (AIDL).
  • До Android 2.2 Dalvik VM не поддерживала JIT-компиляцию, что было серьёзным ударом по производительности. Начиная с версии 2.2, скорость выполнения часто используемых приложений заметно возросла .
Ребята из Google также пересмотрели стандартные пакеты Java JDK API. Они удалили некоторые из них (например всё, что касалось Swing) и добавили некоторое количество собственных - их имя начинается с «android».

Также они добавили несколько пакетов с открытым кодом, не являющихся частью стандартного JDK: Bouncy Castle crypto API, HTTPClient с поддержкой разделения HTTP/HTTPS на стороне клиента.

Также Google добавила веб-браузер в уровень инфраструктуры приложения. Это не полноценный Google Chrome для мобильных устройств, но очень близок к нему, поскольку основан на том же движке WebKit и использует движок JavaScript из Chrome. В конце концов, это крайне современный и высокотехнологичный браузер. Он может быть интегрирован в любые Android-приложения.

На сегодня это всё. В следующей статье мы сосредоточим внимание на архитектуре Android-приложений.

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

Которая сейчас и занимается поддержкой и дальнейшим развитием платформы. Android позволяет создавать Java -приложения, управляющие устройством через разработанные Google библиотеки. Также есть возможность писать приложения на Си и других языках программирования с помощью Android Native Development Kit.Первым устройством, работающим под управлением Android, стал разработанный компанией HTC смартфон T-Mobile G1 , презентация которого состоялась 23 сентября 2008 года.Вскоре другие производители заявили о намерении выпустить устройства с Android.Кроме того, энтузиасты портировали Android на ряд известных устройств, среди которых: Nokia N810 , смартфоны HTC Touch , HTC TyTN II .Также известны случаи успешного портирования на компьютеры архитектуры x86.Отдельного упоминания достойна инициатива компании Koolu, которая занялась не только портированием Android на Neo FreeRunner , но и строит свой бизнес на продаже этих -смартфонов с предустановленной мобильной платформой Google.

Альтернативные прошивки, разрабатываемые открытым сообществом

Существует сообщество энтузиастов, разрабатывающее полностью open-source варианты Android-прошивок. CyanogenMod и VillainROM - известные примеры данных прошивок.

  • удаления из Android-устройства сервисов Google (например, таких как синхронизация данных) - для обеспечения локализации данных пользователя только на Android-устройстве - исключения возможности передачи идентификационной информации (IMEI, номера телефона, GPS-координат и т. д.) на серверы Google;
  • более оперативного и частого (по сравнению с производителями самих аппаратов) предоставления новых версий Android OS;
  • дополнения Android-прошивки новыми настройками и функциями. Возможность для хранения загруженных приложений на MicroSD карте (для версий Android до 2.2) и т. д.

Некоторые производители Android-устройств аппаратно блокируют возможность перепрошивки (например, HTC), некоторые аппаратно не блокируют (но тем не менее сохраняют трудности по перепрошивке; например, LG (для версий Android до 2.2.1). А некоторые производители (Sony Ericsson в некоторых моделях аппаратов) делают всё чтобы продвинутый пользователь мог не только установить другую прошивку, но и самостоятельно создать свою (предоставляется детальная инструкции по замене прошивок, программное обеспечение, документация по архитектуре программной платформы, код оригинальной прошивки и т.д.). Риск, связанный с возможной поломкой телефона в процессе разблокирования, перекладывается на пользователя, который в случае разблокирования загрузчика соглашается с условиями, указывающими на досрочную потерю гарантии на телефон (для восстановления гарантии необходимо снова установить официальным флэшером официальную прошивку).

Архитектура Android

Уровень ядра Linux (Linux Kernel)

Как известно, Андроид основан на несколько урезанном ядре ОС Linux и поэтому на этом уровне мы можем видеть именно его (версии 2.6.x). Оно обеспечивает функционирование системы и отвечает за безопасность, управление памятью, энергосистемой и процессами, а также предоставляет сетевой стек и модель драйверов

Уровень библиотек (Libraries)


Набор библиотек (Libraries), предназначенный для обеспечения важнейшего базового функционала для приложений. То есть именно этот уровень отвечает за предоставление реализованных алгоритмов для вышележащих уровней, поддержку файловых форматов, осуществление кодирования и декодирования информации (в пример можно привести мультимедийные кодеки), отрисовку графики и многое другое. Библиотеки реализованы на C/C++ и скомпилированы под конкретное аппаратное обеспечение устройства, вместе с которым они и поставляются производителем в предустановленном виде.

  1. Surface Manager – в ОС Android используется композитный менеджер окон. Вместо того чтобы производить отрисовку графики напрямую в буфер дисплея, система посылает поступающие команды отрисовки в закадровый буфер, где они накапливаются вместе с другими, составляя некую композицию, а потом выводятся пользователю на экран. Это позволяет системе создавать интересные бесшовные эффекты, прозрачность окон и плавные переходы.
  2. Media Framework – библиотеки. С их помощью система может осуществлять запись и воспроизведение аудио и видео контента, а также вывод статических изображений. Поддерживаются многие популярные форматы, включая MPEG4, H.264, MP3, AAC, AMR, JPG и PNG.
  3. SQLite – легковесная и производительная реляционная СУБД , используемая в Android в качестве основного движка для работы с базами данных, используемыми приложениями для хранения информации.
  4. OpenGL ES (OpenGL for Embedded Systems) – подмножество графического программного интерфейса OpenGL, адаптированное для работы на встраиваемых системах.
  5. FreeType – библиотека для работы с битовыми картами. Это высококачественный движок для шрифтов и отображения текста.
  6. WebKit – библиотеки браузерного движка, используемого также в десктопных браузерах Google Chrome и Apple Safari.
  7. SGL (Skia Graphics Engine) – открытый движок для работы с 2D-графикой. Графическая библиотека является продуктом Google и часто используется в других их программах.
  8. SSL - библиотеки для поддержки одноименного криптографического протокола.
  9. Libc – стандартная библиотека языка C, а именно её BSD реализация, настроенная для работы на устройствах на базе Linux. Носит название Bionic.

На этом же уровне располагается Android Runtime – среда выполнения.


Ключевыми её составляющими являются набор библиотек ядра и виртуальная машина Dalvik . Библиотеки обеспечивают большую часть низкоуровневой функциональности, доступной библиотекам ядра языка Java.

Каждое приложение в ОС Android запускается в собственном экземпляре виртуальной машины Dalvik. Таким образом, все работающие процессы изолированы от операционной системы и друг от друга. И вообще, архитектура Android Runtime такова, что работа программ осуществляется строго в рамках окружения виртуальной машины. Благодаря этому осуществляется защита ядра операционной системы от возможного вреда со стороны других её составляющих. Поэтому код с ошибками или вредоносное ПО не смогут испортить Android и устройство на его базе, когда сработают. Такая защитная функция, наряду с выполнением программного кода, является одной из ключевых для надстройки Android Runtime.

Уровень каркаса приложений (Application Framework)


Android позволяет использовать всю мощь API , используемого в приложениях ядра. Архитектура построена таким образом, что любое приложение может использовать уже реализованные возможности другого приложения при условии, что последнее откроет доступ на использование своей функциональности. Таким образом, архитектура реализует принцип многократного использования компонентов ОС и приложений.

Основой всех приложений является набор систем и служб:

  1. Богатый и расширяемый набор представлений (Views), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.
  2. Контент-провайдеры (Content Providers), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.
  3. Менеджер ресурсов (Resource Manager), обеспечивающий доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.
  4. Менеджер оповещений (Notification Manager), благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.
  5. Менеджер действий (Activity Manager), который управляет жизненными циклами приложений, сохраняет данные об истории работы с действиями, а также предоставляет систему навигации по ним.
  6. Менеджер местоположения (Location Manager), позволяющие приложениям периодически получать обновленные данные о текущем географическом положении устройства.

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

Первое, что нужно знать: Android есть вариант ОС Linux, и хоть здесь эта система нашла свою родную нишу. Внутри системы, на самом базовом ее уровне, находится модифицированное ядро Linux, которое, как в больших системах, нужно часто обновлять. Намного чаще, чем в других мобильных ОС, иначе вы лишитесь возможности использовать новые фишки, датчики, приложения и прочие полезные штуки. Ядро работает с приложениями и драйверами через API системы, и только на этом уровне драйверов и системных приложений можно писать программы на языке С++. Среднюю часть машины занимает платформа, которую можно сравнить с.NET от Майкрософт. Она управляется языком Java. Каждое приложение пользователя порождает процесс, когда платформа формирует для него виртуальную среду исполнения. В этот момент Java приложения в виде кода классов и библиотек автоматически переводятся в универсальный байт-код, исполняемый на байт-машине Delvik. Эта машина имеет много общего с Java-машиной JVM.

Приложения работают в изолированной друг от друга среде, захватывая только те ресурсы, которые им необходимы. В этом коренное отличие, например, от программ на ПК, где любая программа может захватить все ресурсы. Хотя приложения оптимизированы по качеству кода и изолированы друг от друга, у них есть не только приоритеты вытесняющей многозадачности, но и способы обмена данными и файлами путем присвоения им одинаковых идентификаторов. Таким образом, можно сделать так, что родственные программы будут тратить минимум лишних ресурсов, обращаясь к API через платформу, а также общим файлам профилей, спискам контактов и т.д. Здесь интересно то, что Delvik можно подсунуть и другой код на Java, который виртуальная машина примет как родной. Это позволяет реализовывать многочисленные виртуальные системы разработки, применять новые языки программирования и даже менять фреймворк приложений на альтернативные варианты – лишь бы он умел генерировать байт-код и соответствовать вызовам API.

Платформа, или фреймворк, работает с данными унифицированным образом, переводя их в формат баз данных SQLite – с таким же форматом работает, к примеру, Mozilla на ПК. Доступом в Сеть заведует оптимизированный для мобильных устройств браузер Chrome. Для создания безупречной графики API поддерживает технологию OpenGL ES v.3.0, а также целый набор жадных графических и видеоформатов и контейнеров для их хранения, включая h.264, mkv, MP4 и т.д.

Связь с другими устройствами – проводная (USB, карты памяти) и беспроводная (BT, IR, Wi-Fi, EDGE/3G/LTE). Множество датчиков завязаны на получение сигналов извне системы: GPS, акселерометр, компас, фотосъемка, датчик темноты, фитнес-датчики.

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