Вступ до операційної системи Android
Операційна система Android - це система з відкритим кодом. Багато хто каже, що це Linux, але це не зовсім так. Хоча в Android є ядра, схожі на Linux, але це єдине, що схоже. Сьогодні ми будемо більш глибоко вивчати нутрощі Операційної системи Android, тобто процеси, рамки та інші подібні структури. Отже, почнемо з самих основ і поглянемо на внутрішній корінь операційної системи Android.
Після випуску iPhone і Windows Lumia Series, тобто телефонів, пов’язаних з Microsoft Windows, Google захотіла зробити те саме. Але вони хотіли чогось, що може бути з відкритим кодом. Основна причина цього полягала в тому, що хтось міг її налагоджувати, змінювати будь-які зміни за своїм бажанням. Тоді прийшла ідея Linux. Linux - це повністю відкрита операційна система, і вона широко сприймається спільнотою в усьому світі. Це одна з тих операційних систем, яка використовується навіть більше, ніж Windows або Mac OSX. Крім того, Linux має можливість запускати майже всі інші речі, які можна було б запустити на Mac або Windows. Таким чином, Google вирішив розробити операційну систему для мобільного телефону з тією ж базовою внутрішньою оболонкою, що і Linux, щоб вона була сумісною майже з усім, а зовнішня оболонка була б розроблена як, коли, так і як це потрібно.
Операційна система Android як проект з відкритим кодом (AOSP)
Android має можливість вільно змінювати, винаходити та впроваджувати власні драйвери пристроїв та функції. Зараз говорити, існує п'ять різних шарів операційної системи Android. Виходить так:
Як ви бачите на наведеному вище зображенні, перший шар - це Application Framework, другий - Binder IPC Proxies, третій складається з системних служб Android, четвертий - HAL або повна форма - апаратний абстракційний шар, а останній будучи ядром Linux. Тепер, як я вже говорив, ви бачите, що єдиною частиною Linux, з якої складається операційна система Android, є ядро Linux. Тепер давайте розглянемо всі вони по черзі.
Android Application Framework
Ця програма використовує розробники додатків для Android. Ця частина Android має щонайменше нічого не робити із апаратним шаром. Програми Android програмуються мовою Java. Після програмування програми інструменти Android SDK допомагають збирати дані та файли ресурсів, такі як файли XML, файли jar, файли маніфесту та інші зображення та інше в один єдиний пакет архіву з розширенням '.apk'. Цей файл apk можна використовувати для встановлення програми лише одним клацанням миші на пристроях Android. Тепер, оскільки операційна система Android поводиться як середовище Linux, поведінка додатків тут теж однакова. Кожен додаток розглядається як окремий користувач від іншого і працює у власній віртуальній машині. Це робить програмований код програми ізольованим, а також запобігає зараженню від інших, якщо прямо не зазначено. Кожен інший додаток має свій ідентифікатор USER, а кожен інший процес має свою віртуальну машину.
Рамка додатків для Android працює на принципі найменшого привілею. Принцип найменшого привілею означає, що коли потрібно буде запустити нову програму, але немає пам’яті, система Android автоматично закриє стару програму, яку не потрібно запускати у фоновому режимі. Це одна з найкращих частин безпеки операційної системи Android. Цей принцип дозволяє кожному додатку мати лише той доступ, який необхідний для його роботи. Таким чином, програма не може отримати дозвіл на те, що не планується робити. Це, в свою чергу, створює дуже безпечне середовище в самій операційній системі Android.
Binder IPC відомий як Binder Inter-Process Communication. Цей інтерфейс дозволяє програмісту зробити програму для спілкування з іншими програмами. Частіше це не програми, які спілкуються, це процеси. Binder IPC допомагає запускати кілька процесів одночасно на одночасному рівні. Ця реалізація біндерів здійснюється через ядро Операційної системи Android. Зараз виникли запитання щодо того, чому біндер повинен залишатися в ядрі, і чому він не може працювати з механізмами IPC Linux? Основна причина цього полягає в тому, що сполучна дозволяє уникати зайвого розподілу місця на відміну від інших механізмів IPC в системі Linux. Якщо ви чули про термін "магія в python", то саме так Binder IPC виглядав би для розробника програми, оскільки він повністю прихований від них, і він, схоже, працює, на відміну від рамки високого рівня, де вам потрібно змусити це явно працювати. Це фактично дає змогу рамкам високого рівня спілкуватися з сервісами операційної системи Android.
Системні послуги операційної системи Android
Сервіс - це складений фрагмент коду, який тривалий час працює на тлі операційної системи Android, не надаючи інтерфейсу. Будь-яка програма, може бути користувачем або системою, може запустити послугу, але вона все одно працюватиме у фоновому режимі, навіть якщо програма закрита. Однак існують два види послуг:
Початок обслуговування
Служби, що розпочалися, зазвичай запускаються, коли програма звертається до нього. Однак, розпочатий тип послуги зазвичай робить лише одну операцію і нічого не повертає.
Обмежені послуги
Обмежені послуги пропонують інтерфейс відносин клієнт-сервер. Обмежена служба працює до запуску програми переднього плану, а потім вона зупиняється, коли діяльність програми буде знищена.
Системні сервіси Android надають необхідну інформацію для програм користувачів, щоб вони працювали належним чином. І ці комунікації між системними службами та користувацькими додатками здійснюються за допомогою IPC Binder від Kernel. Тепер це може здивувати, але не всі програми в Android написані на Java. Деякі з них написані на С і С ++. Ті програми, яким потрібно близько контактувати з обладнанням, написані на C та C ++. Основна причина цього полягає в тому, що більшість часу системні служби потребують постійного контакту з обладнанням. Це робить важливим, щоб складений фрагмент коду був надзвичайно швидким. А якщо мова йде про апаратне прискорення та високу продуктивність, C набагато швидше, ніж Java або будь-яка інша мова там.
Службові послуги, які постійно користуються, наприклад: Датчики близькості, акселерометр або сенсорний екран повинні бути написані на C. Інше обладнання, як-от Камера або звук, в основному використовує дзвінки JNI. Таким чином, якщо ви коли-небудь помітите, сенсорні екрани завжди будуть швидшими, ніж запуск камери або відтворення пісні через музичний плеєр.
Створюючи системну службу, зауважте, що служби, як правило, запускаються в основному процесі, і це не створює окремого процесу. Якщо коротко, якщо ваш код буде виконувати інтенсивну роботу CPU та GPU, наприклад, ігри високої чіткості, то вам слід віддати перевагу створенню нових тем у тій самій службі; інакше завжди буде велика ймовірність наявності діалогового вікна "Не відповідає".
Рекомендовані курси
- Навчання з сертифікації безпеки ІТ
- Повний курс Ruby on Rails
- Професійне навчання CSS
- Програма на HTML5 та CSS3
Шар абстракції обладнання
Шар абстракції HAL або апаратного забезпечення спеціально розроблений для постачальників. Розробникам додатків тут мало або майже нічого робити. Цей шар допомагає вставити функціональність, не змінюючи систему. Кожна інша система має інший дизайн HAL, оскільки вони зроблені для пристрою. HAL складається з двох типових структур: Модуль і Пристрій.
Структура модуля в HAL зберігається як спільна бібліотека у форматі .so, що складається з основних метаданих, таких як номер версії, автор, який спроектував модуль, тощо. Структура пристрою - це власне обладнання цього продукту. Схожа на модуль, але структура пристрою визначає більш вичерпну версію загальної інформації про обладнання, яка містить покажчики та інші подібні речі, які є особливими для кожного обладнання.
У Linux програми зв’язуються з базовим обладнанням через системні дзвінки. Але в операційній системі Android додатки спілкуються з обладнанням через Java API.
Linux Kernel
Компіляція ядра Linux для операційної системи Android аналогічна компіляції для базової ОС Linux. Єдина відмінність полягає в тому, що версія Android трохи досконаліша, ніж версія Linux. Основна причина ядра андроїда складається з додаткових функцій, таких як будильник, подвійне торкання для розблокування та інші подібні функції, вбудовані в мобільний операційний пристрій. Такі функції, як будинок важливі, оскільки ядро буде працювати на портативному пристрої, і воно повинно бути трохи агресивнішим в управлінні пам’яттю та акумулятором; на відміну від базового Linux, де управління енергією не є проблемою. Ці додаткові вимоги викликаються ядром, а не системою, оскільки ці речі не повинні впливати на вбудовані драйвери.
Кожного разу, коли ви чуєте, як людина говорить "свій Linux", вони зазвичай мають на увазі ядро, оскільки воно є найпростішою і досі найважливішою частиною будь-якої операційної системи. Основна причина, чому Android базується на ядрі Linux, полягає в тому, що його відкритий код. Будь-який бажаючий може продовжувати та змінювати ядро Linux без будь-яких апаратних обмежень або навіть проблем із роялті.
Різниця між Linux та Android
Тож тепер ми нарешті дійшли до найбільш заплутаного етапу цього блогу: Linux проти Android. Люди зазвичай розглядають андроїд як дистрибутив Linux, але я б сказав, що вони мають рацію лише на 50%. Кожен раз, коли завантажується операційна система Android, вона в основному завантажує ядро, як і будь-який інший дистрибутив Linux, але решта програмного забезпечення повністю відрізняється від Linux. Програми Linux не працюватимуть на android, а також навпаки, якщо вони не складені в середовищі chroot. Бібліотеки, присутні в типовому дистрибутиві Linux та Android, абсолютно відрізняються один від одного. В основному ви не можете отримати доступ до кореневого терміналу в Android, як у випадку з Linux. Це головна причина, чому люди зазвичай встановлюють Busybox, SuperSU та його бінарні файли після вкорінення, щоб мати більш детальний доступ командного рядка до ядра та оболонки. У Android немає оболонки за замовчуванням, але її можна отримати, встановивши емулятор терміналу з магазину google play. Термінальний емулятор виглядає так:
Виконання андроїда працює на віртуальній машині Dalvik. Цей Dalvik VM насправді є перекладачем мови програмування Java. Весь час роботи Android написано на Java в Android, і оскільки всі програми Android написані на Java, програма стає набагато простішою і гладшою, щоб запускати програми у віртуальному середовищі. А оскільки всі Програми та навіть час виконання написані на Java, будь-якому розробнику стає набагато простіше налаштувати кожен і інший біт операційної системи Android. Андроїд, як правило, розроблявся як операційна система єдиного користувача (на відміну від льодяника та зефіру, де може бути кілька користувачів.) Насправді зробити це простіше, дозвольте мені викласти його у такій формі. Програми для Android - це не що інше, як процеси Linux, і вони як правило працюють. І оскільки я вже говорив вище, що у кожного додатка є свій процес, ядру стає простіше створити окремий UID для кожного процесу та обробляти файли та пам'ять додатків без зайвих зусиль.
Насправді в цьому є більше, ніж про основи операційної системи Android, про які я згадував вище. Android має основний процес, відомий як "зигота", і він відрізняється тим, що робить. Цей процес насправді починається з команд ініціалізації, коли андроїд завантажується. Я не буду надто детально описуватись тут, але я думаю, що основ Android-системи насправді достатньо, щоб ви почали працювати з Android. Щоб отримати більше інформації, ви можете фактично відвідати source.android.com та developers.android.com, який є офіційним веб-сайтом від Google для будь-якого оновлення на android.
Рекомендовані статті
Ось кілька статей, які допоможуть вам отримати більш детальну інформацію про операційну систему Android, тому просто перейдіть за посиланням.
- HTML5 vs Flash - чим вони відрізняються
- 8 найпопулярніших програм Office Suite для вашого Android
- Топ 5 безкоштовних Android-емуляторів для ПК
- Запитання щодо інтерв'ю для Android - 10 найкращих корисних питань
- Кар'єра в розробці Android
- 33 найкращих відмінності iPhone від Android