Данная статья является переводом соответствующей статьи Aditya Agrawal. Оригинал доступен по ссылке.

В этом посте я буду говорить об архитектуре Android.

Ниже представлена диаграмма архитектуры Android.

2_part_1

Вам пока могут быть знакомы некоторые компоненты на изображении выше. Давайте начнём.

  • Начиная снизу, мы видим ядро Linux (ведь Android построен на ядре Linux). Linux широко используется уже много лет, и его ядро получило очень много исправлений безопасности. Ядро Linux предоставляет базовый функционал системы, как то: управление процессами, памятью, устройствами типа камеры, клавиатуры, дисплея etc. Также ядро берёт на себя все те вещи, в которых Linux действительно хорош, как то: сетевое взаимодействие и широкий набор драйверов устройств, которые снимают проблемы взаимодействия с другими устройствами.

Что в действительности ядро Linux предлагает Android?

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

  1. Модель управления доступом на основе пользователей (дискреционная)
  2. Изоляция процессов
  3. Расширяемый механизм для безопасного IPC (межпроцессного взаимодействия)
  4. Возможность удалять ненужные и потенциально небезопасные части ядра

Как многопользовательская система, фундаментальная цель ядра Linux для обеспечении безопасности — изолировать ресурсы пользователей друг от друга. Философия безопасности Linux — защищать ресурсы пользователей друг от друга. Таким образом, Linux:

  1. Предотвращает чтение пользователем A файлов пользователя B;
  2. Гарантирует, что пользователь A не израсходует часть памяти, отведённую пользователю B;
  3. Гарантирует, что пользователь A не израсходует часть процессорного времени, отведённую пользователю B;
  4. Гарантирует, что пользователь A не займёт аппаратные ресурсы пользователя B (например, телефон, GPS, Bluetooth).

 

  • Слой аппаратных абстракций (Hardware Abstraction Layer, HAL) просто даёт приложениям прямой доступ к аппаратным ресурсам.
  • Переходя к третьей части, доходим до Библиотек, Среды исполнения Android и Dalvik. Указанные на рисунке библиотеки очень важны, без них приложение не будет работать. Например, библиотека Webkit используется для просмотра веб-страниц, библиотека SQLite — для ведения баз данных SQL и т.д.
  • Виртуальная машина Dalvik, которая специально разработана Android Open Source Project для исполнения приложений, написанных для Android. Каждое приложение, запускаемое на устройстве Android, имеет собственную виртуальную машину Dalvik.
  • Среда исполнения Android (AndRoid Runtime, ART) — альтернатива виртуальной машине Dalvik, которая была выпущена с Android 4.4 в качестве экспериментального релиза. В Android Lolipop (5.0) она полностью заменит виртуальную машину Dalvik. Большие изменения в ART вызваны компиляцией «перед исполнением» (Ahead-Of-Time (AOT) compilation) и сборкой мусора (garbage collection). В случае с AOT-компиляцией приложения для Android будут компилироваться тогда, когда пользователь устанавливает их на своё устройство, в то время как Dalvik использовал JIT-компиляцию, при которой байт-код компилировался тогда, когда пользователь запускал приложение.
  • Фреймворк приложения. Слой фреймворка приложения предоставляет приложениям множество служб верхнего уровня в виде классов Java. Разработчикам приложений разрешается использовать эти службы в своих приложениях.

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