В этой серии статей я расскажу о внутреннем устройстве Android — о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.
Статьи серии:
- Как работает Android, часть 1
- Как работает Android, часть 2
- Как работает Android, часть 3
- Как работает Android, часть 4
- …
История появления
На сегодняшний момент существует множество устройств, которые работают на платформе Android. Данная операционная система предназначена для смартфонов и планшетов, наручных часов и электронных книг, игровых приставок и даже очков Google. Возможно, в скором времени появятся телевизоры и автомобили с поддержкой Андроид.
История создания ОС началась еще в 2003 году. В то время была основана небольшая организация под названием Android inc. Её учредителями были Рич Майнер, Крис Уайт, Энди Рубин и Ник Сирс. Уже тогда велись некоторые разработки, которые планировалось реализовать в новой операционной системе. Компания осуществляла свою деятельность в условиях строжайшей секретности.
Вскоре у организации закончились деньги, а значительных достижений в разработках ОС так и не было. Из-за отсутствия результатов инвесторов привлечь не удалось. Через время разработками заинтересовался Google. В 2005 году компания стала собственностью поискового гиганта.
После этого была основана корпорация Open Handset Alliance. В её состав вошли передовые изготовители мобильных устройств. В 2007 году была впервые представлена платформа Андроид. Как известно в её основе лежит ядро Linux. Первая версия данной операционной системы вышла в 2008 году.
Android is Linux
По поводу такой формулировки было много споров, так что сразу поясню, что именно я имею в виду под этой фразой: Android основан на ядре Linux, но значительно отличается от большинства других Linux-систем.
Среди исходной команды разработчиков Android был Robert Love, один из самых известных разработчиков ядра Linux, да и сейчас компания Google остаётся одним из самых активных контрибьюторов в ядро, поэтому неудивительно, что Android построен на основе Linux.
Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но — за несколькими исключениями — вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.
Другая причина того, что в Android не используется софт от GNU — известная политика «no GPL in userspace»:
We are sometimes asked why Apache Software License 2.0 is the preferred license for Android. For userspace (that is, non-kernel) software, we do in fact prefer ASL 2.0 (and similar licenses like BSD, MIT, etc.) over other licenses such as LGPL.
Android is about freedom and choice. The purpose of Android is promote openness in the mobile world, and we don’t believe it’s possible to predict or dictate all the uses to which people will want to put our software. So, while we encourage everyone to make devices that are open and modifiable, we don’t believe it is our place to force them to do so. Using LGPL libraries would often force them to do just that.
Само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть большого и важного фреймворка Binder, о котором я расскажу ниже), wakelocks (управление спящим режимом) и low memory killer. Исходно они представляли собой патчи к ядру, но их код был довольно быстро добавлен назад в upstream-ядро. Тем не менее, вы не найдёте их в «обычном линуксе»: большинство других дистрибутивов отключают эти компоненты при сборке.
В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем — она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.
В Android есть оболочка командной строки (shell) и множество стандартных для Unix-подобных систем команд/программ. Во встраиваемых системах для этого обычно используется пакет Busybox, реализующий функциональность многих команд в одном исполняемом файле; в Android используется его аналог под названием Toybox. Как и в «обычных» дистрибутивах Linux (и в отличие от встраиваемых систем), основным способом взаимодействия с системой является графический интерфейс, а не командная строка. Тем не менее, «добраться» до командной строки очень просто — достаточно запустить приложение-эмулятор терминала. По умолчанию он обычно не установлен, но его легко, например, скачать из Play Store (Terminal Emulator for Android, Material Terminal, Termux). Во многих «продвинутых» дистрибутивах Android — таких, как LineageOS (бывший CyanogenMod) — эмулятор терминала предустановлен.
Второй вариант — подключиться к Android-устройству с компьютера через Android Debug Bridge (adb). Это очень похоже на подключение через SSH:
[email protected]$ adb shell android$ uname Linux
Из других знакомых компонентов в Android используются библиотека FreeType (для отображения текста), графические API OpenGL ES, EGL и Vulkan, а также легковесная СУБД SQLite.
Кроме того, раньше для реализации WebView использовался браузерный движок WebKit, но начиная с версии 7.0 вместо этого используется установленное приложение Chrome (или другое; список приложений, которым разрешено выступать в качестве WebView provider, конфигурируется на этапе компиляции системы). Внутри себя Chrome тоже использует основанный на WebKit движок Blink, но в отличие от системной библиотеки, Chrome обновляется через Play Store — таким образом, все приложения, использующие WebView, автоматически получают последние улучшения и исправления уязвимостей.
Что это такое
Андроид – это операционная система, на которой работают смартфоны, планшеты и множество других устройств. Благодаря данной ОС даже самый недорогой телефон сможет приобрести новые возможности. Система позволит установить на девайс различные полезные программы, которые помогут сполна использовать все функции устройства.
Всё необходимое программное обеспечение можно скачать с Play Market. На данном сайте собранно более 700 тысяч программ. Широкий ассортимент позволит отыскать любое нужное приложение. С помощью операционной системы можно с легкостью получить доступ к интернету, смотреть видеофайлы, общаться в социальных сетях, слушать музыку, делать фотографии и тут же размещать их на своем аккаунте или читать электронные книги.
Стоит отметить, что ОС является совершенно бесплатной. Кроме того, она очень проста в использовании. Чтобы разобраться в интерфейсе не понадобится много времени. Благодаря всем своим достоинствам она стала самой распространенной в мире. За 2014 год было продано более 86% устройств, функционирующих на данной платформе.
Программное обеспечение
На OS Android существует множество игр и программ, андроид-приложений. Что это? Это программы в байт-коде (то есть в своеобразном наборе инструкций) для виртуальной машины, которая устанавливает их и запускает.
Для игр и программ на Android был предусмотрен соответствующий установочный пакет .APK. Для написания приложений на устройства с такой операционной системой доступны множество библиотек: SSL, Bionic, OpenGL ES и различные мультимедийные файлы. Разработку программ можно вести даже на языке Java, но не ниже версии 1.5. По сути, для их создания не нужно иметь никаких дополнительных устройств, помимо самого андроид-девайса. Хотя многие умельцы могут разрабатывать приложения и при помощи эмулятора.
Применение ОС
С момента появления операционной системы Андроид и до нашего времени, разработчики не сидят, сложа руки. Платформа постоянно дорабатывается. При этом её функциональность расширяется, путем внедрения новых возможностей.
Платформа стала настолько популярной и комфортной в использовании, что многие компании, которые занимаются разработкой современных гаджетов, решили выпускать свои устройства на базе этой ОС.
Пользоваться Андроидом не так и сложно как кажется. С её помощью на устройстве можно выполнять практически те же действия, что и на компьютере.
Система предусматривает несколько стандартных приложений. Среди них есть:
- браузер;
- электронная почта;
- календарь;
- голосовой поиск;
- соцсети;
- навигатор;
- погода;
- новости.
Все приложения от компании Гугл.
Еще одним приятным плюсом является возможность настраивать свой рабочий стол самостоятельно. Можно добавить на устройстве дополнительный экран, где можно разместить ярлыки или виджеты. Также можно установить любую понравившуюся тему или обои, тем самым видоизменить интерфейс.
It’s all about apps
Как легко заметить, использование Android принципиально отличается от использования «обычного Linux» — вам не нужно открывать и закрывать приложения, вы просто переключаетесь между ними, как будто все приложения запущены всегда. Действительно, одна из уникальных особенностей Android — в том, что приложения не контролируют напрямую процесс, в котором они запущены. Давайте поговорим об этом подробнее.
Основная единица в Unix-подобных системах — процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения — это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы — другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).
Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части — на уровне Unix — оперируют понятием процесса, на более высоком уровне — уровне Android Framework — основной единицей является приложение. Приложение — не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.
У приложений Android нет функции main(), нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.
In Android, however, we explicitly decided we were not going to have a main() function, because we needed to give the platform more control over how an app runs. In particular, we wanted to build a system where the user never needed to think about starting and stopping apps, but rather the system took care of this for them… so the system had to have some more information about what is going on inside of each app, and be able to launch apps in various well-defined ways whenever it is needed even if it currently isn’t running.
Для реализации такой системы нужно, чтобы приложения имели возможность общатся друг с другом и с системными сервисами — другими словами, нужен очень продвинутый и быстрый механизм IPC.
Этот механизм — Binder.
Чем хороша
Данная ОС обладает рядом достоинств. Главными из них являются:
- удобство эксплуатации – система оснащена клавиатурой QWERTY, использовать которую комфортно и привычно, при этом можно выбрать любую другую среди бесплатных и платных приложений;
- быстрота работы девайса – гаджет моментально реагирует на команды и без зависания, и прочих неприятностей выполняет поставленные задачи;
- огромный ассортимент приложений и игр – большинство из них являются бесплатными, кроме того, открыт доступ ко всем продуктам Гугл;
- отсутствует запрет на установку различных приложений и дополнений;
- нет необходимости устанавливать дополнительные программы, чтобы получить доступ к памяти девайса – для этого нужно подключиться к компьютеру с помощью USB.
Команды init.rc
Процесс init имеет встроенный набор команд, многие из которых повторяют стандартный набор команд Linux. Наиболее примечательные из них:
- exec /путь/до/команды — запустить внешнюю команду;
- ifup интерфейс — поднять сетевой интерфейс;
- class_start имя_класса — запустить службы, относящиеся к указанному классу;
- class_stop имя_класса — остановить службы;
- insmod /путь/до/модуля — загрузить модуль ядра;
- mount ФС устройство каталог — подключить файловую систему;
- setprop имя значение — установить системную переменную;
- start имя_службы — запустить указанную службу;
- trigger имя — включить триггер (выполнить указанный блок команд);
- write /путь/до/файла строка — записать строку в файл.
Конкуренты
Главные конкуренты, с которыми платформе Android приходится бороться за пальму первенства это:
- Apple iPhoneOS;
- Microsoft Windows Mobile;
- RIM BlackBerry OS;
- Maemo/MeeGo;
- Samsung Bada OS;
- Palm webOS;
- Symbian OS.
На сегодня Андроид стал наиболее распространенной мобильной платформой в мире, нежели iOS. Однако в скором времени планируется презентация новой ОС Ubuntu Phone. Возможно, она станет еще одним серьезным конкурентом Андроида.
Юридические скандалы Google
12 августа 2010 года Oracle подала в суд на Google по обвинению в нарушении авторских прав и патентов, связанных с языком программирования Java. Первоначально Oracle требовал компенсировать убытки в размере 6,1 миллиарда долларов, но эта оценка была отклонена федеральным судьей Соединенных Штатов, который попросил Oracle пересмотреть их требование.
Не все всегда бывает хорошо.
Естественно, представители Google заявили, что Android не нарушал патенты или авторские права Oracle, добавив, что эти патенты были недействительными, а также привел еще несколько доводов в свою защиту. В мае 2012 года присяжные заявили, что Google не нарушал патенты Oracle, а судья постановил, что структура API Java, используемая Google, не защищена авторским правом.
Но на этом история не закончилась… 9 мая 2014 года Федеральный округ частично отменил постановление окружного суда и вынес решение в пользу Oracle в отношении вопроса о защите авторских прав. В декабре 2015 года Google объявила, что следующий крупный выпуск Android, которым должен был стать Android Nougat, переключится на OpenJDK, который является официальной реализацией платформы Java с открытым исходным кодом.
Apple показала, что ни во что не ставит смартфоны на Android
В своем заявлении Google утверждал, что это было частью усилий по созданию «общей базы кода» между Java на Android и другими платформами, но позднее гигант признался, что это было частью усилий по разрешению споров с Oracle. В итоге в июне 2021 года федеральный суд Соединенных Штатов вынес решение в пользу Google, заявив, что его использование API было справедливым.
Были у Google и суды.
Конечно, были и другие судебные тяжбы, но они не были столь крупными, не имели такой огласки или в них не было столько подробностей. Можно вспомнить скандалы партнеров вроде спора Apple и Samsung, но они больше имеют отношение именно к партнерам, а не к самой Google.
Из юридических проблем в России можно вспомнить, как Федеральная антимонопольная служба оштрафовала Google по итогам разбирательства в части предустановленного ПО. По данным ведомства, оно нарушало антимонопольное законодательство и мешало сторонним сервисам нормально развиваться. Разбирательство было инициировано Яндексом.
Почему гендиректор Google стесняется говорить о смартфонах Google Pixel
Устройства на Андроид
В 2008 году было выпущено первое устройство, которое работало на базе Андроид. Девайс был разработан компанией HTC. Им стал смартфон под названием HTC Dream. После этого еще несколько производителей телефонов изъявили желание выпускать мобильные устройства с поддержкой этой операционной системы.
Вскоре был анонсирован планшет на платформе Android. В 2009 году на рынке появилась фоторамка, работающая на этой ОС. Кроме того, через 2 года организация Blue Sky разработала новые наручные часы, которые получили название i’m Watch. Они также поддерживают данную систему.
Производители фотоаппаратов также решили не отставать и представили первую фотокамеру в мире, которая работает на Андроиде. Новинка была выпущена компанией Nikon. Кроме того, на данной платформе функционируют игровые приставки, электронные книги и медиаплееры. Предполагается, что в скором времени появятся еще некоторые девайсы.
С таким темпами развития платформа Android станет абсолютным лидером среди остальных операционных систем, оставив всех конкурентов позади.
Благодаря качественно продуманному интерфейсу, удобному пользованию и надежной защите данных, устройства на данной ОС, безусловно, достойны внимания.
Операционная система: понятие и разновидности
Самыми популярными OS для компьютера являются Windows, macOS и Linux. Но в этой статье пойдет речь о начинке для мобильных устройств. Что касается телефонов и планшетов, то их операционка представляет некий гибрид функциональности ОС ПК с опциями для карманных девайсов (камера, Bluetooth, NFC и так далее).
Итак, под операционной системой понимают совокупность программ, которые управляют ресурсами устройства и обеспечивают взаимодействие с пользователем. Операционные системы отличаются друг от друга по многим признакам: типу интерфейса, многозадачности, функциональности и т. д. На данный момент актуальными OS среди мобильных устройств являются Windows 10 Mobile, Android и iOS.