Структура файлової системи android. Внутрішній устрій систем Android

Файлова система os Android

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



в андроїд немає звичних багатьом дисків - таких як з або д. Корінь файлової системи у нас: «». до кореневої директорії приєднуються всі інші директорії. Розглянемо деякі з них:

system- за назвою вже можна здогадатися що тут розташовуються системні файли (що щось на зразок ми можемо бачити в ос від майкрософт c: windows). Де ці файли за замовчуванням незмінні. Призначені вони для функціонування операційної системи. Так само тут розташовуються вбудовані додатки, вбудовані в ос. Якщо ми отримаємо рут права то зможемо вносити свої зміни в даній директорії. Однак робити це варто акуратно бо видалені файли  і папки не відновляться самі по собі. У такому випадку нам допоможуть лише перепрошивка або бекап. Дещо - що цікаве можна знайти в папці systemmedia. В архіві bootanimation.zip  лежать картинки складові анімацію при включенні апарату. Ще в корені папки system можна знайти файл build.prop  який містить в собі багато налаштувань, від опису апарату до щільності екрану (для настройки цього конфіга існує багато сторонніх додатків).скрін


Data  - на відміну від систем тут зберігаються змінювані файли. В під категорії app  якраз зберігаються apk встановлених нами програм. скрін

Якщо нам потрібен апк файл будь-якого додатка то ми легко можемо його там знайти. А в datadata  дані цих встановлених програм.
Mnt  -в цей розділ монтується призначена для користувача пам'ять (якщо наприклад встановити флеш карту). Таким чином якщо ми помістимо наш тхт файл в корінь флеш карти то повний шлях буде виглядати так « mntsdcardфайл.тхт». Сюди ж монтується вбудований диск у смартфонів без підтримки карт пам'яті. скрін


Як зробити wipe (скидання налаштувань) на android


існує кілька способів форматування. Про кілька з них нижче
1.сброс через настройки. Заходимо в настройки \u003e\u003e відновлення і скидання \u003e\u003e скидання налаштувань. Скидає всі настройки і видаляє встановлений по. Перед цим можна зробити резервне копіювання деяких налаштувань, зазначивши галочкою відповідний пункт. Після перезавантаження апарат запитає відновити ці дані.
скрін


2.сброс через recovery.  Корисний в тій ситуації коли апарат не включається. Буде потрібно рут доступ і відповідно встановлений recovery. Залежно від встановленого recovery розташування пунктів може відрізнятися. У мене це пункт advanced wipe. Містить в собі:
dalvik cache  - форматування кеша віртуальної машини dalvik.
System- форматування системного розділу.
Data  - видалення всіх сторонніх додатків в пам'яті пристрою а так само для користувача налаштувань.
cache - видалення кеша
format sdcard  - форматування карти пам'яті. Видалення всього що знаходиться на карті пам'яті.
format sd-ext- форматування ЕХТ розділу на карті пам'яті (якщо був створений такий розділ. Наприклад для монтування скрипта посилається додатки при установки на карту).
3. форматування за допомогою сервісного коду.  Якщо набрати * 2767 * 3855 #. відразу ж після набору стається збій. Будьте уважні.
Так наприклад видалення вмісту папки datadata  ми видалимо настройки і дані додатків але не самі додатки. Це так само можна зробити і з налаштувань програми «видалити дані». При видаленні папки дата буде видалено встановлені додатки.
Побажання, поправки, доповнення до статті прохання залишати в коментарях або до мене в личку. стаття буде доповнюватися. Дякую читачам, успіхів.
-----------------
  Залишити коментарі можна в розділі Каталог статей програмне забезпечення проміжного шару, Лежить набір бібліотек (Libraries), призначений для вирішення типових завдань, що вимагають високої ефективності. Тобто, саме цей рівень відповідає за надання реалізованих алгоритмів для вищого рівня, підтримку файлових форматів, здійснення кодування і декодування інформації (в приклад можна привести мультимедійні кодеки), отрисовку графіки і багато іншого. Бібліотеки реалізовані на C / C ++ і скомпільовані під конкретне апаратне забезпечення  пристрою, разом з яким вони і поставляються виробником в передбаченому вигляді.

Перерахуємо деякі з низькорівневих бібліотек:

  1. Surface Manager - в ОС Android використовується композитний менеджер вікон, на зразок Compiz (Linux), але більш примітивний. Замість того, щоб виробляти малювання графіки безпосередньо в буфер дисплея, система посилає надходять команди малювання в закадровий буфер, де вони накопичуються разом з іншими, складаючи якусь композицію, а потім виводяться користувачеві на екран. Це дозволяє системі створювати цікаві безшовні ефекти, реалізувати прозорість вікон і плавні переходи.
  2. Media Framework - бібліотеки, реалізовані на базі PacketVideo OpenCORE. З їх допомогою система може здійснювати запис і відтворення аудіо та відео даних, а також висновок статичних зображень. Підтримуються багато популярних форматів, включаючи MPEG4, H.264, MP3, AAC, AMR, JPG і PNG. В майбутньому на зміну OpenCORE повинен прийти більш простий фреймворк Stagefright.
  3. SQLite - легка і продуктивна реляційна СУБД, яка використовується в Android в якості основного движка для роботи з базами даних.
  4. 3D бібліотеки - використовуються для високооптимізовані малювання 3D-графіки, при можливості використовують апаратне прискорення. Їх реалізації будуються на основі API OpenGL ES 1.0.
  5. FreeType - бібліотека для роботи з бітовими картами, а також для растеризації шрифтів і здійснення операцій над ними. Це високоякісний движок для шрифтів і відображення тексту.
  6. LibWebCore - бібліотеки відомого браузерного движка WebKit, який використовується також в десктопних браузерах Google  Chrome і Apple Safari.
  7. SGL (Skia Graphics Engine) - відкритий движок для роботи з 2D-графікою. Графічна бібліотека є продуктом Google і часто використовується в інших їхніх програмах.
  8. SSL - бібліотеки для підтримки однойменного криптографічного протоколу на базі OpenSSL.
  9. libc - бібліотека стандартних викликів мови C, аналог glibc (GNU libc з Linux) для маленьких пристроїв. Носить назву Bionic.


Мал. 1.5.

На цьому ж рівні розташовується Android Runtime - середовище виконання прикладних програм. Ключовими її складовими є набір стандартних бібліотек і віртуальна машина Dalvik. Кожна програма в ОС Android запускається у власному примірнику віртуальної машини Dalvik. Таким чином, всі, хто працює процеси ізольовані від операційної системи і один від одного. Архітектура Android Runtime така, що робота програм здійснюється строго в рамках оточення віртуальної машини. Завдяки цьому здійснюється захист ядра операційної системи від можливої ​​шкоди з боку інших її складових. Тому код з помилками або шкідливі програми не зможуть зіпсувати ОС Android і пристрій на її базі. Така захисна функція, поряд з виконанням програмного коду, є однією з ключових для Android Runtime.

Рівнем вище розташовується Application Framework, іноді званий рівнем каркаса додатків. Саме через каркаси додатків розробники отримують доступ до API, наданих компонентами системи, що лежать нижче рівнем. Крім того, завдяки архітектурі фреймворка, будь-якого додатка надаються вже реалізовані можливості інших додатків, до яких дозволено отримувати доступ. У базовий набір сервісів і систем, що лежать в основі кожної програми і є частинами фреймворка, входять:

  1. Багатий і розширюваний набір уявлень (Views), який може бути використаний для створення візуальних компонентів додатків, наприклад, списків, текстових полів, таблиць, кнопок або навіть вбудованого web-браузера.
  2. Контент-провайдери (Content Providers), керуючі даними, які одні додатки відкривають для інших, щоб ті могли їх використовувати для своєї роботи.
  3. Менеджер ресурсів (Resource Manager), що забезпечує доступ до ресурсів, що не несе коду, наприклад, до строкових даними, графіку, файлів та інших.
  4. Менеджер сповіщень (Notification Manager), завдяки якому всі додатки можуть відображати власні повідомлення для користувача в рядку стану.
  5. Менеджер дій (Activity Manager), який управляє життєвими циклами додатків, зберігає дані про історію роботи з діями, а також надає систему навігації по ним.
  6. Менеджер розташування (Location Manager), що дозволяють додаткам періодично отримувати оновлені дані про поточний географічному положенні пристрою.

На вершині програмного стека Android лежить рівень додатків (Applications). Так само як набір базових додатків, Який встановлено на ОС Android. Наприклад, в нього входять браузер, поштовий клієнт , Програма для відправки SMS, карти, календар, менеджер контактів і багато інших. Список інтегрованих програм може змінюватися в залежності від моделі пристрою та версії Android  . І крім цього базового набору до рівня додатків можна адресувати прикладні програми під платформу Android, в тому числі і встановлені користувачем.

Як правило, програми під Android пишуться на мові Java, але існує можливість розробляти програми і на C / C ++ (за допомогою Native Development Kit). Екзотикою можна назвати використання Basic (за допомогою Simple) і інших мов. Також можна створювати власні програми за допомогою конструкторів додатків, таких як App Inventor.

1.6. особливості ядра

Ядро є найважливішою частиною ОС Linux, і на відміну від інших його частин, було перенесено в ОС Android майже повністю. Проте, в процесі перенесення на ядро ​​було накладено близько 250 патчів.

В ядрі ОС Android було вирішено відмовитися від коштів між процесами взаємодії ОС Linux і замість них створити єдиний механізм, названий Binder. Binder дозволяє викликати методи одного процесу з іншого процесу, передаючи їм аргументи і отримуючи результат, подібно до того, як методи викликаються всередині одного процесу. Binder робить цю роботу з мінімальним використанням пам'яті.

Для забезпечення налагодження на маленьких пристроях в ядро ​​доданий висновок налагоджувальної інформації в послідовний порт  і реалізована підтримка команди logcat.

Великі зміни торкнулися роботи з пам'яттю. Традиційна колективна пам'ять Linux shmem була замінена на ashmem. Таке ж завдання, але на рівні фізичної пам'яті, вирішується за допомогою драйвера pmem. Додано спеціальний обробник нестачі пам'яті (out of memory), названий Viking Killer, в найпростішому випадку він просто вбиває процес, але можуть бути задані більш складні правила.

У мережевий стек додані нові настройки безпеки, підтримка файлової системи для флеш-носіїв YAFFS2 включена в ядро.

1.7. Java-машина Dalvik

Dalvik Virtual Machine є частиною мобільної платформи Android. це віртуальна машина, Автором якої є Ден Бронштейн. Вона поширюється як вільне програмне забезпечення  під BSD -Сумісність ліцензією Apache 2.0. Багато в чому саме цей факт зіграв свою роль в рішенні Google відмовитися від JME (Java Micro Edition), на яку необхідно було б отримати ліцензію від Sun. Тому корпорація, метою якої було створення відкритої операційної системи, розробило свою власну віртуальну машину.

На відміну від більшості віртуальних машин (тієї ж Java Virtual Machine), які є стек -орієнтуватися, Dalvik є регістр-орієнтованої, що не можна назвати стандартним рішенням. З іншого боку, воно дуже добре підходить для роботи на процесорах RISC-архітектури, до яких відносяться і процесори ARM, дуже широко застосовуються в мобільних пристроївах.

Dalvik проектувалася спеціально під платформу Android. Враховувався той факт, що платформа будує всі процеси як ізольовані, виконуються кожен в своєму адресному просторі. Віртуальна машина   оптимізована для низького споживання пам'яті та роботи на мобільному апаратному забезпеченні. Починаючи з версії Android 2.2., Dalvik використовує JIT (Just-in-Time) компіляцію. В результаті цих особливостей, вийшла швидка і продуктивна віртуальна машина, Що не може не позначатися на роботі додатків в цілому.

Dalvik використовує власний байт-код. При розробці програми під Android переводяться компілятором в спеціальний машинно-незалежний низькорівневий код. При виконанні на платформі саме Dalvik інтерпретує і виконує таку програму.

Крім того, Dalvik здатна переводити байт-коди Java в коди власного формату і також виконувати їх у своїй віртуальному середовищі. Програмний код пишеться на мові Java, а після компіляції все. class файли конвертуються в формат.dex (придатний для інтерпретації в Dalvik) за допомогою спеціальної утиліти dx, що входить до складу Android SDK.

1.8. Bionic

Bionic - бібліотека стандартних викликів мови C, поширювана під ліцензією BSD (Berkeley Software Distribution? Система поширення програмного забезпечення  у вихідних кодах, створена для обміну досвідом між навчальними закладами) і розроблена Google для Android. У bionic відсутні деякі не використовуються в Android функції POSIX, доступні в повній реалізації glibc.

Основні відмінності bionic:

  1. BSD ліцензії: Android використовує Linux ядро, яке знаходиться під GNU General Public License (GPL), але Google побажав ізолювати додатки для Android від наслідків GPL. GNU libc, який зазвичай використовується з ядром Linux знаходиться під ліцензією GNU LGPL, як альтернативний uClibc.
  2. малі розміри: об'єктний код bionic набагато менше (приблизно в 2 рази), ніж glibc і дещо менше, ніж uclibc.
  3. bionic призначена для процесорів c відносно низькими тактовими частот.
  4. усічена, але ефективна реалізація ниток POSIX.

1.9. Огляд Java-інтерфейсів прикладного програміста

Для прикладного програміста Android - набір інтерфейсів на мові Java. Розглянемо, як він організований. В основі набору - пакети, що входять в стандарт мови Java, такі як java.util, java.lang, java.io. Вони є на будь-якій платформі, де можуть бути запущені java-додаток, і неспецифічні для Android. До них приєднуються розширення, які в стандарт мови не входять, але де-факто давно є стандартними - пакети javax.net, javax.xml.

Також в Android включені менш поширені розширення Java   - пакет org.apache.http, найсолідніша реалізація протоколу HTTP. Пакет org.json відповідає за сериализацию об'єктів JavaScript і підтримку технології AJAX. Пакет org.w3c.dom забезпечує об'єктну модель документа

  • Переклад

У цій статті ми розглянемо архітектуру Android-додатків.

Відверто кажучи, офіційну Google по цій темі я вважаю не дуже корисною. Детально відповідаючи на питання «як», вона зовсім не пояснює «що» і «чому». Отже, ось моя версія, і, я сподіваюся, вона внесе деяку ясність. Так, до речі, я повністю схвалюю читання статей Google, оскільки вони містять корисну інформацію, повторювати яку я не збираюся.

Архітектура ОС Android - трохи історії

  Як це часто буває в IT, багато речей не можуть бути пояснені у відриві від історії виникнення конкретного програмного забезпечення. Ось чому ми повинні звернутися до витоків ОС Android.

Розробка ОС Android була розпочата в 2003 молодою компанією Android Inc. У 2005 році ця компанія була куплена Google. Я вважаю, що головні особливості архітектури Android були визначені саме в цей період. Це заслуга не тільки Android Inc; архітектурні концепції і фінансові ресурси Google зробили вирішальний вплив на архітектуру Android. Далі я приведу кілька прикладів.

Якщо ви пам'ятаєте, 2003-2005 роки були ознаменовані підвищеною увагою до AJAX додатків. Я думаю, це зробило основне вплив на архітектуру Android: у багатьох аспектах вона ближче до архітектури типового AJAX додатки, ніж до десктопних GUI додатку, написаному на Java, C #, C ++, VB і тп.

Не знаю, чому так сталося. Моя здогадка - це придумав хтось із Google в той період, коли насичені інтернет-додатки (Rich Internet Applications, RIA) в дусі Google Docs або Gmail вважалися рішенням всіх проблем. По-моєму, цю ідею не можна назвати ні поганою, ні хорошою. Просто пам'ятайте, що Android-додатки дуже сильно відрізняються від десктопних.

Вплив архітектурної філософії Eclipse помітно у виборі принципу реалізації GUI, який більше схоже на SWT, ніж на Swing.

У стандартах оформлення коду Android присутній «угорська нотація», народжена в стінах MS. Можна припустити, що той, хто писав ці стандарти, раніше займався розробкою під Windows.

Архітектурні рівні Android
  Операційна система Android має три дуже різних і сильно відокремлених один від одного рівня:
  1. В основі лежить модифікована і урізана версія Linux, як я і згадував в одній з моїх попередніх статей.
  2. Над рівнем Linux знаходиться рівень інфраструктури додатки, що містить віртуальну машину Dalvik, веб-браузер, базу даних SQLite, деякі інфраструктурні «милиці» і Java API.
  3. І, нарешті, рівень написаних в Google Android-додатків. Взагалі кажучи, вони є розширенням рівня інфраструктури, оскільки розробник може використовувати ці додатки або їх частини як будівельні блоки для власних розробок.
  Розглянемо ці шари один за іншим і більш докладно.

рівень Linux

  Уявіть собі, що ви - архітектор в молодої компанії. Ви повинні розробити ОС для нового типу пристроїв. Що ви будете робити?

Грубо кажучи, у вас два шляхи: реалізовувати власні ідеї, почавши з нуля або ж використовувати існуючу ОС і адаптувати її під свої пристрої.

Реалізація з нуля завжди звучить захоплююче для програмістів. У ці моменти ми всі віримо в те, що в цей раз ми все зробимо краще, ніж роблять інші, і навіть краще, ніж ми самі робили раніше.

Тим не менш, це не завжди практично. Наприклад, використання ядра Linux помітно зменшило вартість розробки (можливо десь і без того надмірно велику). Погодьтеся, якщо хтось вирішить створити щось, що нагадує ядро ​​Linux в його сьогоднішньому стані, йому буде потрібно кілька мільйонів доларів.

Якщо ви керуєте Android Inc, то у вас за визначенням не може бути стільки грошей. Якщо ви керуєте Google, то у вас такі гроші знайдуться, але ви, швидше за все, подумаєте двічі, перш ніж витратити їх на створення власної ОС. Так само ви витратите кілька років, перш ніж досягнете сьогоднішнього стану Linux; кілька років затримки можуть стати занадто великим запізненням при виході на ринок.

У подібній ситуації компанія Apple вирішила побудувати Mac OS на основі Free BSD. Android Inc прийняла рішення використовувати Linux як основу для Android. Вихідні тексти як Free BSD, так і Linux, знаходяться у вільному доступі і надають собою гарну основу для будь-яких розробок, будь то Apple або Google.

Але в той час запустити стандартний Linux на мобільному пристрої було неможливо (зараз це вже не так). Пристрої мали занадто мало оперативної і незалежній пам'яті. Процесори були значно повільніше в порівнянні з процесорами комп'ютерів, де зазвичай використовується Linux. Як результат, розробники Android вирішили мінімізувати системні вимоги  Linux.

Якщо розглядати Linux на високому рівні, То це комбінація ядра (без якого не можна обійтися) і безлічі інших, необов'язкових частин. Можна навіть запустити одне ядро, без чого б то не було ще. Так, Google змушена в будь-якому випадку використовувати ядро ​​Linux як частина ОС Android. Крім того, були розглянуті необов'язкові частини і з них вибрано найнеобхідніше. Наприклад, були додані мережевий фаєрвол IPTables і оболонка Ash. Цікаво, що додали саме Ash, а не Bash, не дивлячись на те, що останній на порядок потужніша; ймовірно, це рішення було засноване на тому, що Ash менш вимогливий до ресурсів.

Розробники Android модифікували ядро ​​Linux, додавши підтримку заліза, використовуваного в мобільних пристроях і, найчастіше, недоступного на комп'ютерах.

Вибір Linux в якості основи зробив величезний вплив на всі аспекти ОС Android. Збірка Android, по суті, є варіація процесу складання Linux. код Android  знаходиться під управлінням git (інструмент, розроблений для управління кодом Linux). І так далі.

Нехай це все і цікаво, але ви, швидше за все, ніколи не торкнетеся всіх цих специфічних моментів до тих пір, поки ваша мета просто розробити додатки під Android. Виняток може скласти хіба що огляд файлової системи за допомогою команд ash. Головне, що ви повинні знати, розробляючи програми під Android - це рівень інфраструктури додатки.

Ви можете запитати, як же бути, якщо необхідно розробити нативное додаток для Android? Google настійно не рекомендує робити цього. Технічно, звичайно, це можливо, але в подальшому у вас не буде можливості поширювати цей додаток нормальним способом. Так що подумайте двічі, перш ніж почати нативную розробку під Android, якщо звичайно, ви не працює над Android Open Source Project (AOSP), тобто власне ОС Android.

Рівень інфраструктури додатки

  Незважаючи на деяку схожість Apple iOS  і Android ОС, існують значні відмінності між архітектурними рішеннями на інфраструктурному рівні обох ОС.

Apple вирішила використовувати Objective-C як мова програмування і середовище виконання додатки iOS. Objective-C виглядає більш-менш природним вибором для ОС, в основі якої лежить Free BSD. Можна розглядати Objective-C як звичайний C ++ з кастомними препроцесором, який додає деякі специфічні лінгвістичні конструкції. Чому ж не можна використовувати стандартний C ++, на якому написана Free BSD? Мені здається причина в тому, що Apple намагається все робити в своєму, «еппловскій» стилі.

Основна ідея в тому, що додатки iOS написані більш-менш на тому ж мовою, що і що стоїть за ними ОС.

Android-додатки сильно відрізняються в цьому сенсі. Вони написані на Java, а це зовсім інша технологія, ніж C ++ (хоча синтаксис і успадкований від C ++).

Я думаю, основна причина полягає в необхідності одному і тому ж додатку працювати на різному апаратному забезпеченні. Ця проблема має місце лише для ОС Android; у хлопців з Apple такої проблеми немає. iOS працює тільки на обладнанні власного виробництва, і Apple повністю контролює весь процес. Для Android же все навпаки: Google не контролює виробників апаратних засобів. Наприклад, ОС Android працює на процесорах з архітектурою x86, ARM і Atom (в коментах підказують, що x86 включає в себе Atom, і Android працює на x86, ARM, PPC і MIPS - примітка перекладача). На бінарному рівні ці архітектури несумісні.

Якби архітектори ОС Android вибрали той же шлях, що і архітектори з Apple, розробники додатків під Android були б змушені поширювати кілька версій одного і того ж додатка одночасно. Це стало б серйозною проблемою, яка могла б привести до краху всього проекту Android.

Для того, щоб один і той же додаток могло працювати на різному апаратному забезпеченні, компанія Google використовувала контейнер-орієнтовану архітектуру (container-based architecture). У такій архітектурі двійковий код виконується програмним контейнером і ізолюється від деталей конкретного апаратного забезпечення. Приклади всім знайомі - Java і C #. В обох мовах двійкового коду не залежить від специфіки апаратного забезпечення і виконується віртуальною машиною.

Звичайно, є й інший спосіб досягти незалежності від апаратного забезпечення на рівні двійкового коду. Як один з варіантів, можна використовувати емулятор апаратного забезпечення, так само відомий як QEMU. Він дозволяє емулювати, наприклад, пристрій з процесором ARM на платформі x86 і так далі. Google могла б використовувати C ++ як мову для розробки додатків всередині емуляторів. Дійсно, Google використовує такий підхід в своїх емуляторах Android, які побудовані на основі QEMU.

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

Як би там не було, компанія Google прийшла до рішення використовувати Java як основна мова розробки додатків і середовища їх виконання.

Я думаю, це було критично важливе архітектурне рішення, яке поставило Android осторонь від інших мобільних ОС на основі Linux, представлених в даний час. Наскільки мені відомо, ні в однієї з них немає сумісності двійкового коду на рівні додатків. Візьмемо для прикладу MeeGo. Вона використовує C ++ і фреймворк Qt; не дивлячись на те, що Qt багатоплатформовий, необхідність робити різні збірки для різних платформ не зникає.

Вибравши Java, потрібно було вирішити, яку віртуальну машину (JVM) використовувати. Зважаючи на обмеженість ресурсів використання стандартної JVM було утруднено. Єдиним можливим вибором було використання Java ME JVM, розробленої для мобільних пристроїв. Однак щастя Google було б неповним без розробки власної віртуальної машини, і з'явилася Dalvik VM.

Dalvik VM відрізняється від інших віртуальних Java-машин наступним:

  • Вона використовує спеціальний формат DEX для зберігання двійкових кодів, на противагу форматам JAR і Pack200, які є стандартом для інших віртуальних Java-машинах. Компанія Google заявила, що бінарники DEX менше, ніж JAR. Я думаю, з тим же успіхом вони могли б використовувати Pack200, але вони вирішили піти своїм шляхом.
  • Dalvik VM оптимізована для виконання декількох процесів одночасно.
  • Dalvik VM використовує архітектуру, засновану на регістрах проти стековой архітектури в інших JVM, що призводить до збільшення швидкості виконання і зменшення розмірів бінарників.
  • Вона використовує власний набір інструкцій (а не стандартний байткод JVM)
  • Можливий запуск (якщо необхідно) декількох незалежних Android-додатків в одному процесі
  • Виконання програми може охоплювати кілька процесів Dalvik VM «природним чином» (пізніше ми обговоримо, що це означає). Для підтримай цього додано:
    • Спеціальний механізм серіалізациі об'єктів, заснований на класах Parcel і Parcelable. Функціонально переслідуються ті ж цілі, що і Java Serializable, але в результаті дані мають менший обсяг і потенційно більш терпимі до версійність змін класів.
    • Особливий спосіб для здійснення дзвінків між процесами (inter process calls, IPC), основний на Android Interface Definition Language (AIDL).
  • До Android 2.2 Dalvik VM не підтримувала JIT-компіляцію, що було серйозним ударом по продуктивності. Починаючи з версії 2.2, швидкість виконання часто використовуваних додатків

    У певних моделях планшетів на базі платформи Android можуть бути відсутні деякі компоненти з вищенаведеного списку.

    Всі «Андроїдні» планшети управляються однією з версій мобільної операційної системи від компанії Google. При цьому, більш старі версії можуть не підтримувати деякі з сучасних додатків.

    Всі версії найпопулярнішої мобільної операційної системи мають загальну підставу. Ми можемо уявити собі операційну систему Android в якості багатошарової структури. Комп'ютерні інженери називають це програмним стеком. Елементи на вершині стека являють собою те, що бачить користувач в процесі своєї взаємодії з операційною системою. На «денці» стека знаходяться ті частини операційної системи, які взаємодіють безпосередньо з апаратним забезпеченням пристрою.

    Отже, на самому нижньому рівні знаходяться самі апаратні компоненти: процесори, сенсори, проводи й друковані плати. Наступним шаром є ядро ​​операційної системи. Ядро іноді ще називають вбудованим (або фірмовим) програмним забезпеченням. Більш відомо англомовне визначення «firmware». Це програмне забезпечення здійснює контроль над апаратними ресурсами пристрою, управління ними та їх розподілом.

    Ця частина операційної системи «переводить» на мову апаратних компонентів ті команди, які віддає користувач за допомогою зручного графічного інтерфейсу. Зразком ядра для Android стала операційна система  з відкритим кодом Linux 2.6.

    Над ядром операційної системи розташовуються бібліотеки Android. Вони являють собою набори інструкцій, яким пристрій слід в процесі обробки різних типів даних. Прикладом може служити бібліотека орієнтації в тривимірному просторі. Вона містить всі інструкції, які потрібні Android-девайсу для того, щоб розпізнавати зміни свого положення в просторі і реагувати на них.

    На тому ж рівні програмного стека розташовуються кореневі бібліотеки, необхідні для підтримки додатків, написаних на мові Java. Java є мовою програмування від Sun Microsystems. Ще порівняно недавно телефони з підтримкою Java-додатків були дуже поширені. В даний час вони все більшою мірою витісняються смартфонами.

    Віртуальна машина Android розташовується на тому ж рівні програмного стека операційної системи. Цей елемент програмного забезпечення займається створенням віртуального операційного оточення, яку інакше називають також віртуальному операційному середовищем. Віртуальна машина імітує фізичний пристрій з окремою операційною системою. Google спроектувала цей рівень так, щоб кожен додаток, запущене в операційній системі Android, функціонувало в якості окремого процесу. Таким чином, якщо відбудеться збій одного з працюючих процесів, інші залишаться непорушними. Віртуальна машина також грає роль менеджера пам'яті.

    На наступному рівні розташовується інфраструктура додатків (application framework). Вона є основою для всіх додатків «андроидного» девайса. Інфраструктура додатків є сполучною ланкою між додатками і іншими частинами операційної системи.

    Google рекомендує розробникам створювати такі додатки, які взаємодіють з цим шаром в рамках інтерфейсу прикладного програмування () розробленої пошуковим гігантом операційної системи. Розробникам залишається тільки ознайомитися з цими правилами, що стосуються API. Їм не потрібно замислюватися про технічні характеристики  кожного «андроидного» планшета.

    Самий верхній рівень програмного стека містить інтерфейс користувача і всі додатки «андроидного» планшета. Саме цю частину операційної системи постійно бачить перед собою користувач. Але за цим привабливим і барвистим шаром ховається маса нудного, і цікавого тільки фахівцям коду.

    Як і будь-яка інша операційна система, і інші апаратні ресурси планшета.

    За матеріалами computer.howstuffworks.com

# Факти | Як влаштований Android?   Олег Довбня