> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/mobile/kak-rabotaet-android-kakaya-u-nego-arkhitektura.md).

# Как работает Android? Какая у него архитектура?

### 🧠 Что такое Android

**Android** — это операционная система на базе **Linux**, разработанная Google для мобильных устройств (смартфонов, планшетов, ТВ, авто и т.д.).\
Она управляет аппаратными ресурсами устройства и предоставляет платформу для запуска приложений.

***

### 🏗️ Архитектура Android

Архитектура Android многоуровневая. Её обычно изображают в виде **пятислойной схемы**:

```
+--------------------------------------+
|  Приложения (Apps)                   |
+--------------------------------------+
|  Framework приложений (Application Framework)  |
+--------------------------------------+
|  Библиотеки и Android Runtime (ART)  |
+--------------------------------------+
|  HAL (Hardware Abstraction Layer)    |
+--------------------------------------+
|  Ядро Linux (Linux Kernel)           |
+--------------------------------------+
```

***

#### 🧩 1. **Linux Kernel (Ядро Linux)**

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

**Примеры компонентов:**

* Power Management
* Display & Camera Drivers
* Binder (IPC – межпроцессное взаимодействие)
* Bluetooth, USB, Wi-Fi, Audio drivers

***

#### ⚙️ 2. **Hardware Abstraction Layer (HAL)**

* Прослойка между ядром и более высокими уровнями.
* Состоит из модулей (C/C++ библиотек), каждый из которых управляет конкретным типом оборудования: GPS, камера, сенсоры, аудио и т.д.
* Позволяет Android быть кросс-устройственной системой: разные железки — один общий API.

📍**Пример:**\
Приложение вызывает API камеры → Framework обращается к HAL → HAL вызывает драйвер камеры в ядре.

***

#### 🧮 3. **Android Runtime (ART) и Библиотеки**

**📘 Android Runtime (ART)**

* Каждое приложение запускается в своём процессе и со своей виртуальной машиной **ART** (ранее — **Dalvik**).
* ART выполняет байт-код `.dex` (Dalvik Executable), созданный из Java/Kotlin-кода.
* Использует **Ahead-of-Time (AOT)** компиляцию — код компилируется в машинный язык при установке, что ускоряет запуск.

**📚 Библиотеки (C/C++)**

* Предоставляют базовые возможности: графика, медиа, шифрование, БД и т.д.
* Примеры:
  * `libc` — стандартная библиотека C
  * `libm` — математика
  * `OpenGL ES` — 2D/3D графика
  * `SQLite` — локальная база данных
  * `WebKit` — отрисовка веб-страниц

***

#### 🧠 4. **Application Framework**

* Набор **высокоуровневых API**, доступных разработчикам приложений.
* Содержит основные системные сервисы Android.

**Ключевые компоненты:**

* `ActivityManager` — управление жизненным циклом приложений
* `PackageManager` — установка/удаление пакетов
* `WindowManager` — управление окнами
* `ContentProvider` — доступ к данным между приложениями
* `NotificationManager` — уведомления
* `LocationManager` — работа с GPS

***

#### 📱 5. **Applications (Приложения)**

* Самый верхний слой, который видит пользователь.
* Это системные приложения (Настройки, Камера, Телефон) и сторонние (Telegram, Chrome и т.д.).
* Все они используют API из Application Framework.

***

### 🔁 Как это всё работает вместе

Пример — приложение «Камера»:

1. Пользователь запускает приложение (уровень **Application**).
2. Приложение вызывает `Camera API` (уровень **Framework**).
3. Framework вызывает HAL → обращается к драйверу камеры.
4. Драйвер передаёт данные с сенсора через ядро Linux.
5. Изображение возвращается обратно через HAL → Framework → Приложение.
6. Приложение показывает фото на экране.

***

### 💡 Важная особенность

* Каждое приложение в Android изолировано (sandbox) и работает под своим UID → безопасность.
* Межпроцессное взаимодействие происходит через **Binder** (специальный IPC-механизм ядра Android).
