# Архітектура Android OS

[![https://developer.android.com/guide/platform/images/android-stack\_2x.png](https://camo.githubusercontent.com/847adfd0770b41968c1c71590123dc64bacf0fc7dc152402cc4bcaefe5ec7c6c/68747470733a2f2f646576656c6f7065722e616e64726f69642e636f6d2f67756964652f706c6174666f726d2f696d616765732f616e64726f69642d737461636b5f32782e706e67)](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://camo.githubusercontent.com/847adfd0770b41968c1c71590123dc64bacf0fc7dc152402cc4bcaefe5ec7c6c/68747470733a2f2f646576656c6f7065722e616e64726f69642e636f6d2f67756964652f706c6174666f726d2f696d616765732f616e64726f69642d737461636b5f32782e706e67)

**Linux Kernel**

Цей рівень є базовим в архітектурі Android, тому що вся система Android побудована на ядрі Linux з деякими архітектурними змінами.

Основні завдання, які виконує ядро: Ядро містить драйвери, необхідні для взаємодії з обладнанням. Наприклад, візьмемо Bluetooth. У наш час складно знайти пристрій, який би не включав цю функцію. Тому ядро ​​має містити драйвер для роботи з ним. На схемі вище перераховані всі драйвери, що входять в ядро ​​Linux, тому не будемо перераховувати їх всі окремо.

* Power Management – ​​це свого роду система управління живленням. Вона надає різні засоби, за допомогою яких програма може реагувати на режими живлення пристрою, а також підтримувати необхідні компоненти пристрою активними. Наприклад, при читанні книги нам було б зручно, якби екран залишався постійно активним. Або коли ми вмикаємо музику і вона продовжує програватися у фоні у відключеному екрані.
* Управління пам'яттю. При запуску різних програм ядро ​​гарантує, що простір пам'яті, який вони використовують, не конфліктує і не перезаписує один одного. Також воно перевіряє, що всі програми отримують достатній обсяг пам'яті для своєї роботи, і в той же час стежить, щоб жодна програма не займала занадто багато місця.
* Управління процесом. Кожна програма в Android працює в окремому процесі. Ядро відповідає за управління цими процесами, а саме за створення, призупинення, зупинку, або завершення процесів, за одночасне виконання декількох процесів, обмін даними між процесами, запуск процесів у фоновому режимі. Крім цього, ядро ​​розподіляє роботу між процесорами пристрою, що максимізує продуктивність пристроїв з кількома ядрами.

**Hardware Abstraction Layer (HAL)**

HAL забезпечує зв'язок між драйверами та бібліотеками. Складається він із декількох бібліотечних модулів, кожен з яких реалізує інтерфейс для певного апаратного компонента (Bluetooth, Камера тощо). І коли до обладнання пристрою звертаються через API-інтерфейс, завантажується необхідний його роботи модуль.

Якщо пояснювати на пальцях, то коли від програми надходить якесь повідомлення, HAL його обробляє таким чином, щоб воно стало зрозумілим для драйверів. І навпаки.

**Android Runtime (ART)**

Основною мовою Android був обраний Java, оскільки це одна з найпопулярніших мов програмування. Для Java існує багато напрацювань і фахівців, а написані на ньому програми переносяться між операційними системами.

Але для того, щоб програма працювала на Java, необхідна віртуальна машина - Java Virtual Machine. В Android використовується віртуальна машина Android Runtime (ART). Ця машина спеціально оптимізована для роботи на мобільних пристроях: з нестачею пам'яті, з постійним вивантаженням та завантаженням додатків тощо. У версіях Android нижче 5.0 Lollipop використовувалася віртуальна машина Dalvik - стара реалізація віртуальної машини для Android.

В ART, як і в Dalvik, використовується свій формат байт-коду – DEX (Dalvik executable). При складанні програми вихідні файли спочатку компілюються у файли типу class звичайним компілятором, а потім конвертуються спеціальною утилітою в DEX.

І Dalvik, і ART оптимізують код, що виконується, використовуючи механізм компіляції just-in-time (JIT) - компіляція відбувається під час виконання програми, що дозволяє оптимізувати код для виконання на конкретному пристрої. При цьому байт-код програми можна переносити на інші пристрої.

ART може компілювати байт-код заздалегідь, а не під час виконання, використовуючи ahead-of-time (AOT). Система сама вирішує, коли та які програми необхідно скомпілювати. Наприклад, коли пристрій не завантажено та підключено до заряджання. При цьому ART враховує інформацію про програму, зібрану під час попередніх запусків, що дає додаткову оптимізацію.

**Native C/C++ Libraries**

Набір бібліотек, написаних мовами C або C++ та використовуваних різними компонентами ОС.

Приклади бібліотек:

* WebKit - являє собою движок веб-браузера та інші пов'язані з ним функції.
* Media Framework надає медіа-кодеки, що дозволяють записувати та відтворювати різні медіа-формати.
* OpenGL – використовується для відображення 2D та 3D графіки.
* SQLite - движок бази даних, що використовується в Android для зберігання даних.

**Java API Framework (Application Framework)**

Набір API, написаний мовою Java і надає розробникам доступ до всіх функцій Android. Ці API-інтерфейси утворюють будівельні блоки, необхідні для створення додатків, спрощуючи повторне використання основних, модульних, системних компонентів та сервісів, таких як:

* Activity Manager - керує життєвим циклом програми та забезпечує загальний навігаційний стек зворотних викликів.
* Window Manager – керує вікнами і є абстракцією бібліотеки Surface Manager.
* Content Providers - дозволяє додатку отримувати доступ до даних інших програм або обмінюватися власними даними, тобто. надає механізм обміну даними між додатками.
* View System - містить будівельні блоки для створення інтерфейсу програми (списки, тексти, кнопки і т.д.), а також управляє подіями елементів інтерфейсу користувача.
* Package Manager - керує різними видами інформації, пов'язаними з пакетами програм, які зараз встановлені на пристрої.
* Telephony Manager - дозволяє програмі використовувати можливості телефонії.
* Resource Manager – забезпечує доступ до таких ресурсів, як локалізовані рядки, растрові зображення, графіка та макети.
* Location Manager - можливість позиціонування.
* Notification Manager - відображення повідомлень у рядку стану.

**System Apps**

Верхній рівень в архітектурі Android, який включає ряд системних (передвстановлених) додатків і тонну інших додатків, які можна скачати з Google Play.

Системні програми на всіх пристроях різні, але всі вони є встановленими виробниками пристрою (додаток для SMS-повідомлень, календар, карти, браузер, контакти тощо).

Цей рівень використовує всі рівні нижче (якщо дивитися на схему) для правильного функціонування програм.

Джерела:

* [Як працює Android. Архітектура платформи](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://bimlibik.github.io/posts/how-does-android-work/) + [оригінал з оф доки](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://developer.android.com/guide/platform)

Дод. матеріал:

* Більш детальний цикл статей "Як працює Android": частина [1](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://habr.com/ru/company/solarsecurity/blog/334796/) , [2](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://habr.com/ru/company/solarsecurity/blog/338292/) , [3](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://habr.com/ru/company/solarsecurity/blog/338494/) , [4](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://habr.com/ru/company/solarsecurity/blog/427431/)
* [Android's HIDL: Treble in the HAL](https://translate.google.com/website?sl=auto\&tl=uk\&hl=uk\&u=https://www.slideshare.net/opersys/androids-hidl-treble-in-the-hal)
