Данная статья является переводом соответствующей статьи Aditya Agrawal. Оригинал доступен по ссылке.
В этом посте я буду говорить об архитектуре Android.
Ниже представлена диаграмма архитектуры Android.
Вам пока могут быть знакомы некоторые компоненты на изображении выше. Давайте начнём.
- Начиная снизу, мы видим ядро Linux (ведь Android построен на ядре Linux). Linux широко используется уже много лет, и его ядро получило очень много исправлений безопасности. Ядро Linux предоставляет базовый функционал системы, как то: управление процессами, памятью, устройствами типа камеры, клавиатуры, дисплея etc. Также ядро берёт на себя все те вещи, в которых Linux действительно хорош, как то: сетевое взаимодействие и широкий набор драйверов устройств, которые снимают проблемы взаимодействия с другими устройствами.
Что в действительности ядро Linux предлагает Android?
Выступая в качестве основания для окружения мобильного устройства, ядро Linux предоставляет Android некоторые ключевые функции безопасности, включающие в себя:
- Модель управления доступом на основе пользователей (дискреционная)
- Изоляция процессов
- Расширяемый механизм для безопасного IPC (межпроцессного взаимодействия)
- Возможность удалять ненужные и потенциально небезопасные части ядра
Как многопользовательская система, фундаментальная цель ядра Linux для обеспечении безопасности — изолировать ресурсы пользователей друг от друга. Философия безопасности Linux — защищать ресурсы пользователей друг от друга. Таким образом, Linux:
- Предотвращает чтение пользователем A файлов пользователя B;
- Гарантирует, что пользователь A не израсходует часть памяти, отведённую пользователю B;
- Гарантирует, что пользователь A не израсходует часть процессорного времени, отведённую пользователю B;
- Гарантирует, что пользователь 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 будет описана в следующем посте, т.к. заслуживают отдельное упоминание.