Структура и назначение папок и файлов в Android. Архитектура платформы Google 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.

Те, кто использует iPhone давно, знают, как работали ранние версии iOS. Фактически это была однозадачная операционка, которая позволяла работать в фоне или прерывать работу текущего приложения только предустановленным приложениям: вы читаете книжку, вам звонят - книгочиталка сворачивается, и на экране появляется окно звонка. А вот обратная операция невозможна: книгочиталка не только не может прервать работу других приложений, но и будет убита сразу после сворачивания.

Смысл существования такой системы, конечно же, в том, чтобы сэкономить процессор, оперативную память, а также ресурс батареи. Благодаря ей (но не только) iPhone мог работать быстро в условиях ограниченных ресурсов и очень бережно относился к батарее.

Как устроена операционная система Андроид

Android всегда работал иначе. Здесь можно запустить множество различных приложений и все они будут оставаться в памяти и даже смогут работать в фоне. Вы открываете браузер, вводите адрес и, пока загружается страница, запускаете почтовый клиент и читаете письма. Все как на десктопе, с тем исключением, что вам не нужно заботиться о закрытии приложений, система сделает это сама, когда оперативная память подойдет к концу или ее не хватит для размещения запускаемого приложения (само собой, в первую очередь в расход пойдут редко используемые приложения). Этот механизм называется lowmemorykiller .

Имея права root, настройки lowmemorykiller можно регулировать напрямую или с помощью специальных приложений

Важным элементом системы многозадачности были службы (service). Это особые компоненты приложений, которые могли работать в фоне абсолютно в любых условиях: включен экран или выключен, свернуто приложение или развернуто, службам плевать даже на то, запущено ли родительское приложение вообще. Оно просто говорило: «Эй, Android, мне нужны ресурсы процессора, я хочу сделать некоторые расчеты» - и получало эти ресурсы. В терминологии Android такой запрос к системе называется wakelock (а если точнее - процессорный wakelock).

Однако поддержка такого мощного и полезного инструмента сыграла с Google злую шутку. Появилось огромное количество приложений, которые плодили службы на каждый чих, постоянно выполняли какую-то работу и не давали смартфону спать. Установив на смартфон сотню приложений, пользователь получал несколько десятков служб, каждая из которых периодически что-то делала (обновить ленту твиттера, пока телефон спит, - это же так важно).

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

Продвинутые юзеры шли другим путем: они получали права root и устанавливали приложение Greenify, которое позволяло заморозить службы выбранных приложений так, чтобы их уже никто не смог разбудить. Существовали и более радикальные варианты, например снести весь софт, которым пользуешься реже одного раза в сутки.

Сама Google также предпринимала определенные действия для борьбы с «ядовитыми» службами. Большой шаг в этом направлении был сделан в Android 4.4, где появился интеллектуальный механизм, который определял, не работает ли служба слишком много времени и не сильно ли она грузит процессор, и, если это оказывалось так, прибивал ее на месте и не давал запуститься. Даже на поверхностный взгляд эта версия системы жила на батарейке заметно дольше предыдущих.

В Android 6.0 Google пошла еще дальше и оснастила ее механизмом Doze , который после определенного времени неактивности смартфона (около одного часа) переводил его в специальный энергосберегающий режим. Одна из особенностей этого режима - запрет на wakelock, то есть ни приложения, ни службы просто не могут разбудить смартфон, чтобы выполнить какую-либо работу. На глаз Android 6.0 не стал жить дольше, так что неизвестно, сработал ли этот механизм вообще.


Шкала работы Doze

И наконец, в Android 8.0 Google пошла на радикальный шаг - запретила работу фоновых служб. Но с двумя исключениями:

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

Казалось бы, да, службы - это зло, но как теперь быть таким приложениям, как противоугонное, которое должно работать незаметно в фоне? Или тот же почтовый клиент? Из-за необходимости периодически проверять почту он должен висеть в панели уведомлений?

На самом деле нет. Google шла к запрету служб еще с версии 5.0, где появился так называемый JobScheduler . Это специальная подсистема, которая позволяет приложениям попросить Android выполнить ту или иную работу в такое-то время или при возникновении такого-то события (подключение к интернету, например). И да, JobScheduler сильно напоминает аналогичную функцию из iOS.

Binder

Вопреки расхожему мнению, Android с самых первых версий использовал песочницы для изоляции приложений. И реализованы они были весьма интересным образом. Каждое приложение запускалось от имени отдельного пользователя Linux и, таким образом, имело доступ только к своему каталогу внутри /data/data .

Друг с другом и с операционной системой приложения могли общаться только через IPC-механизм Binder , который требовал авторизации на выполнение того или иного действия. Этот же механизм использовался и для несколько других целей: с его помощью система оповещала приложения о системных событиях, таких как входящий вызов, пришедшее СМС, втыкание зарядки и так далее. Приложения получали сообщения и могли на них отреагировать.


Работу Binder обеспечивают драйвер в ядре Linux и Service Manager

Эта особенность дала Android очень широкие возможности автоматизации, о которых мы знаем благодаря таким приложениям, как Tasker, Automate или Locale. Все эти приложения доступны и для Android 8, разве что некоторые опасные возможности, такие как включение/выключение режима полета, теперь запрещены для использования обычными приложениями.

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

К сожалению, как и службы, интенты стали проблемой для Google и пользователей Android. Дело в том, что широковещательные интенты, используемые для уведомления приложений о событиях, приходят сразу ко всем приложениям, которые заявили, что способны на них реагировать. А чтобы приложение смогло среагировать на интент, его надо запустить. Картина получается такая: на смартфоне есть двадцать приложений, которые могут реагировать на интент android.net.conn.CONNECTIVITY_CHANGE, и при каждом подключении к сети и отключении от нее система запускает эти приложения, чтобы они смогли среагировать на интент. Как это сказывается на энергопотреблении - представьте сами.

Google исправила это недоразумение опять же в Android 8.0. Теперь приложения могут регистрировать обработчики широковещательных интентов только во время своей работы (за небольшими исключениями).

Сервисы Google

Google любит бравировать тем, что Android - операционная система с открытым исходным кодом. Это, конечно же, не совсем так. С одной стороны, код Android действительно открыт, и именно поэтому мы имеем доступ к такому количеству разнообразных кастомных прошивок. С другой стороны, собрав Android из официальных исходников, вы получите систему без нескольких важных компонентов: 1) отдельных драйверов, исходники которых производитель прячет, как коммерческую тайну, 2) сервисов Google, которые нужны в первую очередь для получения доступа к аккаунту, запуска Google Play и облачного бэкапа.

Сервисы Google (Google Mobile Services) также отвечают за многие другие вещи, включая поддержку push-уведомлений, Instant Apps, Google Maps, доступ к календарю, определение местоположения по сотовым вышкам и Wi-Fi-роутерам, механизм Smart Lock, позволяющий разблокировать устройство в зависимости от некоторых условий.

В современных версиях Android сервисы Google взяли на себя настолько большую часть работы, что жить без них оказывается хоть и возможно, но очень проблематично. А с ними тоже невесело: минимальный вариант пакета GApps (который содержит только сервисы Google и Google Play) весит больше 120 Мбайт, а сами сервисы славятся своей любовью к оперативке и заряду батареи. А еще они закрыты, то есть о том, что они могут делать, знает только сама Google.


Скачать пакет с сервисами и приложениями Google для кастомной прошивки можно с сайта opengapps.org (слово open не означает, что они открыты)

Именно поэтому на свет появился проект microG, задача которого - воссоздать самую важную функциональность сервисов Google в открытом коде. Уже сейчас microG позволяет получить доступ к своему аккаунту, активировать push-уведомления, доступ к картам Google и определению местоположения по сотовым вышкам. И все это при размере в четыре мега и почти полном отсутствии требований к оперативке и ресурсу батареи.

У проекта есть собственная сборка прошивки LineageOS, которая из коробки включает в себя microG и все необходимые для его работы модификации.

Ядро Linux и рантайм

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


Слоеный пирог Android

Наличие ядра Linux, а также частично совместимой со стандартом POSIX среды исполнения (в первую очередь это библиотека bionic, основанная на реализации стандартной библиотеки языка С из OpenBSD) делает Android совместимым с приложениями для Linux. Например, система аутентификации wpa_supplicant, применяемая для подключения к Wi-Fi-сетям, здесь точно такая же, как в любом дистрибутиве Linux. В ранних версиях Android использовался стандартный bluetooth-стек Linux под названием bluez (позже его заменили реализацией от Qualcomm под названием Bluedroid). Здесь даже есть своя консоль с набором стандартных UNIX/Linux-команд, реализованных в наборе Toybox, изначально созданном для встраиваемых Linux-систем.

Большинство консольных приложений, написанных для Linux, можно портировать в Android простой перекомпиляцией с помощью кросс-компилятора (главное - использовать статическую компиляцию, чтобы не получить конфликт библиотек), а имея права root, на Android-девайсе можно без всяких проблем запустить полноценный . Один нюанс - доступ к нему можно будет получить либо только через консоль, либо используя VNC-соединение. Также существует проект Maru OS, позволяющий использовать смартфон в качестве ПК на базе Debian при подключении к монитору. Ту же функцию обещает при подключении своих смартфонов к монитору с помощью дока DeX.


Старый добрый mc, запущенный в Android

Начиная с версии 4.4 Android умеет использовать систему принудительного контроля доступа SELinux для защиты от взлома и получения прав root. SELinux разработана Агентством национальной безопасности США и, если не вдаваться в детали, позволяет ограничить приложения (в том числе системные низкоуровневые компоненты) в возможностях. И речь вовсе не о полномочиях, которые юзер предоставляет приложениям, а о таких вещах, как системные вызовы и доступ к тем или иным файлам, невзирая на стандартные права доступа UNIX.

Серия уязвимостей Stagefright, поразивших Android несколько лет назад, позволяла получить контроль над устройством, просто заставив юзера открыть пришедшую MMS или специальный файл в браузере. Проблема состояла в мультимедиафреймворке Stagefright, содержащем сразу несколько уязвимостей переполнения буфера. При открытии специальным образом подготовленного мультимедиафайла эксплоит использовал уязвимость и запускал на устройстве код от имени Stagefright (который работал под рутом).

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

Сегодня SELinux используется для защиты почти всех системных компонентов Android. И это стало причиной резкого снижения количества найденных багов в Android. Но привело к фокусировке взломщиков на ядре, а точнее тех самых закрытых драйверах, аудит кода которых никто не проводил и безопасность которых не гарантирована (а она, как оказалось, находится в плачевном состоянии).

(6 оценок, среднее: 5,00 из 5)

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

Для разработки приложений под платформу Android потребуется набор инструментов и библиотек API - Android SDK, последнюю версию которого вы можете найти .

На представленном ниже рисунке показана архитектура ОС Android.


Уровень приложений (Applications)

В состав Android входит комплект базовых приложений: клиенты электронной почты и SMS, календарь, различные карты, браузер, программа для управления контактами и много другое. Все приложения, запускаемые на платформе Android написаны на языке Java.

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

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

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

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

Платформа Android включает набор C/C++ библиотек, используемых различными компонентами ОС. Для разработчиков доступ к функциям этих библиотек реализован через использование Application Framework. Ниже представлены некоторые из них:
1. System C library - BSD-реализация стандартной системной библиотеки C (libc) для встраиваемых устройств, основанных на Linux.
2. Media Libraries – библиотеки, основанные на PacketVideo‘s OpenCORE, предназначенные для поддержки проигрывания и записи популярных аудио- и видео- форматов (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG и т.п.).
3. Surface Manager – менеджер поверхностей управляет доступом к подсистеме отображения 2D- и 3D- графических слоев.
4. LibWebCore – современный движок web-браузера, который предоставляет всю мощь встроенного Android-браузера.
5. SGL – движок для работы с 2D-графикой.
6. 3D libraries – движок для работы с 3D-графикой, основанный на OpenGL ES 1.0 API.
7. FreeType – библиотека, предназначенная для работы со шрифтами.
8. SQLite – мощный легковесный движок для работы с реляционными БД.

Уровень среды исполнения (Android Runtime)

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

Платформа использует оптимизированную, регистр-ориентированную виртуальную машину Dalvik, в отличии от нее стандартная виртуальная машина Java – стек-ориентированная. Каждое приложение запускается в своем собственном процессе, со своим собственным экземпляром виртуальной машины. Dalvik использует формат Dalvik Executable (*.dex), оптимизированный для минимального использования памяти приложением. Это обеспечивается такими базовыми функциями ядра Linux, как организация поточной обработки и низкоуровневое управление памятью. Байт-код Java, на котором написаны ваши приложения, компилируются в dex-формат при помощи утилиты dx, входящей в состав SDK.

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

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

ОС Android - операционная система для мобильных телефонов, планшетных компьютеров и нетбуков, основанная на ядре Linux. Изначально разрабатывалась компанией Android Inc., которую затем купила компания Google. Первая версия ОС Google Android вышла в сентябре 2008 года. В конце 2010 года платформа Android стала самой продаваемой ОС для смартфонов.

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

Архитектура операционной системы Android

Если представить компонентную модель Android в виде иерархии (Рис.2) , то можно выделить 4 основных уровня:

Уровень ядра Linux;

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

Уровень среды исполнения (Android Runtime);

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

Уровень приложений (Applications).

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

Рис.2

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

Перечислим некоторые из низкоуровневых библиотек:

SurfaceManager - диспетчер поверхностей управляет доступом к подсистеме отображения 2D- и 3D- графических слоев.

Media Framework - библиотеки, c помощью которых система может осуществлять запись и воспроизведение аудио и видео данных, а также вывод статических изображений.

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

3D libraries - библиотеки для работы с 3D-графикой.

FreeType - библиотека, предназначенная для работы со шрифтами.

LibWebCore - ядро встроенного web-браузера.

SGL (ScalableGraphicsLibrary) - библиотека для работы с 2D-графикой.

SSL - библиотеки для поддержки одноименного криптографического протокола.

libc - библиотека стандартных вызовов языка C.

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

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

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

Диспетчер действий (ActivityManager) управляет жизненным циклом приложений и предоставляет систему навигации по истории работы с действиями.

Диспетчер окон (Window Manager) управляет окнами, и предоставляет для приложений более высокий уровень абстракции библиотеки Surface Manager.

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

Система представлений (ViewSystem) - это богатый набор представлений с расширяемой функциональностью, который служит для построения внешнего вида приложений, включающий такие компоненты, как списки, таблицы, поля ввода, кнопки и т.п.

Диспетчер уведомлений (NotificationManager) позволяет любому приложению отображать пользовательские уведомления в строке статуса.

Диспетчер пакетов (Package Manager) управляет установленными пакетами на вашем устройстве, отвечает за установку новых и удаление существующих.

Диспетчер телефонии (Telephony Manager) содержит API для взаимодействия с возможностями телефонии (звонки, смс и т.п.)

Диспетчер ресурсов (ResourceManager) предназначен для доступа к строковым, графическим и другим типам ресурсов.

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

Уровень приложений (Applications). На вершине программного стека Android лежит уровень приложений. Сюда относится набор базовых приложений, который предустановлен на ОС Android. Например, в него входят браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов и многие другие. Список интегрированных приложений может меняться в зависимости от модели устройства и версии 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), позволяющие приложениям периодически получать обновленные данные о текущем географическом положении устройства.
Понравилась статья? Поделитесь ей
Наверх