Как работает андроид ос ликбез. Андроид для чайников - что это за система. Как работает Android

Те, кто использует iPhone давно, знают, как работали ранние версии iOS. Фактически это была однозадачная операционка, которая позволяла работать в фоне или прерывать работу текущего приложения только предустановленным приложениям: вы читаете книжку, вам звонят - книгочиталка сворачивается, и на экране появляется окно звонка. А вот обратная операция невозможна: книгочиталка не только не может прервать работу других приложений, но и будет убита сразу после сворачивания.

Смысл существования такой системы, конечно же, в том, чтобы сэкономить процессор, оперативную память, а также ресурс батареи. Благодаря ей (но не только) iPhone мог работать быстро в условиях ограниченных ресурсов и очень бережно относился к батарее.

Как устроена операционная система Андроид

Android всегда работал иначе. Здесь можно запустить множество различных приложений и все они будут оставаться в памяти и даже смогут работать в фоне. Вы открываете браузер, вводите адрес и, пока загружается страница, запускаете почтовый клиент и читаете письма. Все как на десктопе, с тем исключением, что вам не нужно заботиться о закрытии приложений, система сделает это сама, когда оперативная память подойдет к концу или ее не хватит для размещения запускаемого приложения (само собой, в первую очередь в расход пойдут редко используемые приложения). Этот механизм называется lowmemorykiller .

Имея права root, настройки lowmemorykiller можно регулировать напрямую или с помощью специальных приложений

Важным элементом системы многозадачности были службы (service). Это особые компоненты приложений, которые могли работать в фоне абсолютно в любых условиях: включен экран или выключен, свернуто приложение или развернуто, службам плевать даже на то, запущено ли родительское приложение вообще. Оно просто говорило: «Эй, Android, мне нужны ресурсы процессора, я хочу сделать некоторые расчеты» - и получало эти ресурсы. В терминологии Android такой запрос к системе называется wakelock (а если точнее - процессорный wakelock).

Однако поддержка такого мощного и полезного инструмента сыграла с Google злую шутку. Появилось огромное количество приложений, которые плодили службы на каждый чих, постоянно выполняли какую-то работу и не давали смартфону спать. Установив на смартфон сотню приложений, пользователь получал несколько десятков служб, каждая из которых периодически что-то делала (обновить ленту твиттера, пока телефон спит, - это же так важно).

Дела обстояли настолько плачевно, что китайские производители, не обремененные задачей сохранить совместимость с оригинальным Android (это требуется, если хотите устанавливать на свои смартфоны Play Store), просто отключили в своих смартфонах механизмы поддержания жизненного цикла служб для несистемных приложений.

Продвинутые юзеры шли другим путем: они получали права root и устанавливали приложение Greenify, которое позволяло заморозить службы выбранных приложений так, чтобы их уже никто не смог разбудить. Существовали и более радикальные варианты, например снести весь софт, которым пользуешься реже одного раза в сутки.

Сама Google также предпринимала определенные действия для борьбы с «ядовитыми» службами. Большой шаг в этом направлении был сделан в Android 4.4, где появился интеллектуальный механизм, который определял, не работает ли служба слишком много времени и не сильно ли она грузит процессор, и, если это оказывалось так, прибивал ее на месте и не давал запуститься. Даже на поверхностный взгляд эта версия системы жила на батарейке заметно дольше предыдущих.

В Android 6.0 Google пошла еще дальше и оснастила ее механизмом Doze , который после определенного времени неактивности смартфона (около одного часа) переводил его в специальный энергосберегающий режим. Одна из особенностей этого режима - запрет на wakelock, то есть ни приложения, ни службы просто не могут разбудить смартфон, чтобы выполнить какую-либо работу. На глаз Android 6.0 не стал жить дольше, так что неизвестно, сработал ли этот механизм вообще.


Шкала работы Doze

И наконец, в Android 8.0 Google пошла на радикальный шаг - запретила работу фоновых служб. Но с двумя исключениями:

Приложение в некоторых случаях, например когда оно находится на экране, может запускать службы, но Android прибьет их после ухода приложения в сон.
Видимые пользователю службы до сих пор разрешены. Это так называемый foreground service , служба, которая видна в панели уведомлений и имеет иконку в статусбаре.

Казалось бы, да, службы - это зло, но как теперь быть таким приложениям, как противоугонное, которое должно работать незаметно в фоне? Или тот же почтовый клиент? Из-за необходимости периодически проверять почту он должен висеть в панели уведомлений?

На самом деле нет. Google шла к запрету служб еще с версии 5.0, где появился так называемый JobScheduler . Это специальная подсистема, которая позволяет приложениям попросить Android выполнить ту или иную работу в такое-то время или при возникновении такого-то события (подключение к интернету, например). И да, JobScheduler сильно напоминает аналогичную функцию из iOS.

Binder

Вопреки расхожему мнению, Android с самых первых версий использовал песочницы для изоляции приложений. И реализованы они были весьма интересным образом. Каждое приложение запускалось от имени отдельного пользователя Linux и, таким образом, имело доступ только к своему каталогу внутри /data/data .

Друг с другом и с операционной системой приложения могли общаться только через IPC-механизм Binder , который требовал авторизации на выполнение того или иного действия. Этот же механизм использовался и для несколько других целей: с его помощью система оповещала приложения о системных событиях, таких как входящий вызов, пришедшее СМС, втыкание зарядки и так далее. Приложения получали сообщения и могли на них отреагировать.


Работу Binder обеспечивают драйвер в ядре Linux и Service Manager

Эта особенность дала Android очень широкие возможности автоматизации, о которых мы знаем благодаря таким приложениям, как Tasker, Automate или Locale. Все эти приложения доступны и для Android 8, разве что некоторые опасные возможности, такие как включение/выключение режима полета, теперь запрещены для использования обычными приложениями.

Система оповещения базируется на интентах (intent) , специальном механизме, реализованном поверх Binder и предназначенном для обмена информацией между приложениями (или ОС и приложениями), а также запуска компонентов приложений. С помощью интентов можно оповещать приложения о событиях, попросить систему открыть приложение для обработки определенных типов данных (например, чтобы открыть определенную страницу в браузере, достаточно послать широковещательный интент со ссылкой на страницу, и на него откликнутся все приложения, способные отображать веб-страницы, либо только дефолтовый браузер) или просто запустить компонент того или иного приложения. Например, приложения в Android запускаются не напрямую, а с помощью интентов.

К сожалению, как и службы, интенты стали проблемой для Google и пользователей Android. Дело в том, что широковещательные интенты, используемые для уведомления приложений о событиях, приходят сразу ко всем приложениям, которые заявили, что способны на них реагировать. А чтобы приложение смогло среагировать на интент, его надо запустить. Картина получается такая: на смартфоне есть двадцать приложений, которые могут реагировать на интент android.net.conn.CONNECTIVITY_CHANGE, и при каждом подключении к сети и отключении от нее система запускает эти приложения, чтобы они смогли среагировать на интент. Как это сказывается на энергопотреблении - представьте сами.

Google исправила это недоразумение опять же в Android 8.0. Теперь приложения могут регистрировать обработчики широковещательных интентов только во время своей работы (за небольшими исключениями).

Сервисы Google

Google любит бравировать тем, что Android - операционная система с открытым исходным кодом. Это, конечно же, не совсем так. С одной стороны, код Android действительно открыт, и именно поэтому мы имеем доступ к такому количеству разнообразных кастомных прошивок. С другой стороны, собрав Android из официальных исходников, вы получите систему без нескольких важных компонентов: 1) отдельных драйверов, исходники которых производитель прячет, как коммерческую тайну, 2) сервисов Google, которые нужны в первую очередь для получения доступа к аккаунту, запуска Google Play и облачного бэкапа.

Сервисы Google (Google Mobile Services) также отвечают за многие другие вещи, включая поддержку push-уведомлений, Instant Apps, Google Maps, доступ к календарю, определение местоположения по сотовым вышкам и Wi-Fi-роутерам, механизм Smart Lock, позволяющий разблокировать устройство в зависимости от некоторых условий.

В современных версиях Android сервисы Google взяли на себя настолько большую часть работы, что жить без них оказывается хоть и возможно, но очень проблематично. А с ними тоже невесело: минимальный вариант пакета GApps (который содержит только сервисы Google и Google Play) весит больше 120 Мбайт, а сами сервисы славятся своей любовью к оперативке и заряду батареи. А еще они закрыты, то есть о том, что они могут делать, знает только сама Google.


Скачать пакет с сервисами и приложениями Google для кастомной прошивки можно с сайта opengapps.org (слово open не означает, что они открыты)

Именно поэтому на свет появился проект microG, задача которого - воссоздать самую важную функциональность сервисов Google в открытом коде. Уже сейчас microG позволяет получить доступ к своему аккаунту, активировать push-уведомления, доступ к картам Google и определению местоположения по сотовым вышкам. И все это при размере в четыре мега и почти полном отсутствии требований к оперативке и ресурсу батареи.

У проекта есть собственная сборка прошивки LineageOS, которая из коробки включает в себя microG и все необходимые для его работы модификации.

Ядро Linux и рантайм

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


Слоеный пирог Android

Наличие ядра Linux, а также частично совместимой со стандартом POSIX среды исполнения (в первую очередь это библиотека bionic, основанная на реализации стандартной библиотеки языка С из OpenBSD) делает Android совместимым с приложениями для Linux. Например, система аутентификации wpa_supplicant, применяемая для подключения к Wi-Fi-сетям, здесь точно такая же, как в любом дистрибутиве Linux. В ранних версиях Android использовался стандартный bluetooth-стек Linux под названием bluez (позже его заменили реализацией от Qualcomm под названием Bluedroid). Здесь даже есть своя консоль с набором стандартных UNIX/Linux-команд, реализованных в наборе Toybox, изначально созданном для встраиваемых Linux-систем.

Большинство консольных приложений, написанных для Linux, можно портировать в Android простой перекомпиляцией с помощью кросс-компилятора (главное - использовать статическую компиляцию, чтобы не получить конфликт библиотек), а имея права root, на Android-девайсе можно без всяких проблем запустить полноценный . Один нюанс - доступ к нему можно будет получить либо только через консоль, либо используя VNC-соединение. Также существует проект Maru OS, позволяющий использовать смартфон в качестве ПК на базе Debian при подключении к монитору. Ту же функцию обещает при подключении своих смартфонов к монитору с помощью дока DeX.


Старый добрый mc, запущенный в Android

Начиная с версии 4.4 Android умеет использовать систему принудительного контроля доступа SELinux для защиты от взлома и получения прав root. SELinux разработана Агентством национальной безопасности США и, если не вдаваться в детали, позволяет ограничить приложения (в том числе системные низкоуровневые компоненты) в возможностях. И речь вовсе не о полномочиях, которые юзер предоставляет приложениям, а о таких вещах, как системные вызовы и доступ к тем или иным файлам, невзирая на стандартные права доступа UNIX.

Серия уязвимостей Stagefright, поразивших Android несколько лет назад, позволяла получить контроль над устройством, просто заставив юзера открыть пришедшую MMS или специальный файл в браузере. Проблема состояла в мультимедиафреймворке Stagefright, содержащем сразу несколько уязвимостей переполнения буфера. При открытии специальным образом подготовленного мультимедиафайла эксплоит использовал уязвимость и запускал на устройстве код от имени Stagefright (который работал под рутом).

Все эти баги Google благополучно закрыла, а также поработала над модуляризацией кода фреймворка и его запуском в специальных доменах SELinux. Эти домены запрещают компонентам, ответственным за обработку мультимедиа, использовать большую часть системных вызовов Linux, включая системные вызовы группы execve, которые как раз и были причастны к запуску зловредного кода.

Сегодня SELinux используется для защиты почти всех системных компонентов Android. И это стало причиной резкого снижения количества найденных багов в Android. Но привело к фокусировке взломщиков на ядре, а точнее тех самых закрытых драйверах, аудит кода которых никто не проводил и безопасность которых не гарантирована (а она, как оказалось, находится в плачевном состоянии).

(3 оценок, среднее: 5,00 из 5)

Платформа Андроид довольно широко распространена среди мобильных устройств. Решив сменить простой телефон на функциональный смартфон, пользователь с большей вероятностью наткнётся именно на такой гаджет. Разберёмся как новичку научиться пользоваться смартфоном на Андроиде. Рассмотрим основные настройки и особенности пользования с момента самого первого включения до энергосбережения и оптимизации гаджета.

Первое включение

Рассмотрим процесс первого включения и настройки смартфона. Для того чтобы при первичной активации устройства добраться до рабочего стола и подробно рассмотреть его интерфейс необходимо выполнить несколько важных действий. О них и поговори. Но в первую очередь необходимо включить сам смартфон. Для этого найдите кнопку питания, в современных гаджетах она чаще всего расположена на правом ребре корпуса. Нажмите и удерживайте её до тех пор, пока телефон не даст отклик.

Первые настройки

Как только гаджет завершит загрузку, владельцу придётся выполнить первичные настройки, чтобы обеспечить себе удобное пользование. Пункты настроек, следующие.

На этом смартфон прекращает запрашивать основные настройки.

Создание или добавление Google аккаунта

Отдельно разберёмся с Google-аккаунтом. Регистрация в Gmail позволяет владельцу смартфона не только создать новый электронный почтовый ящик, но и получить доступ ко всем брендированным сервисам разработчиков операционной системы. Кроме того, это возможность синхронизации и резервного копирования, удалённого управления гаджетом и другие очень полезные нюансы. Без привязки к аккаунту и её подтверждения Андроид-смартфон практически бесполезен.

Привязка к профилю выполняется на этапе преднастроек. Сервис задаёт вопрос есть ли у владельца нужный аккаунт и в зависимости от ответа предлагает дальнейшие варианты.

  1. Если у вас есть нужный профиль, то нажмите «да» и поочерёдно введите адрес электронной почты и пароль от неё, следуя подсказкам системы.
  2. В случае отрицательного ответа жмём соответствующую кнопку и переходим к процессу регистрации нового аккаунта в Google. В дальнейшем не потеряйте логин и пароль, чтобы иметь доступ к сервису. Система по шагам предложит заполнить все нужные пункты: фамилию и имя владельца для персонализации, предпочитаемый логин и пароль. Сервис сам проверит доступность логина и при необходимости предложит доступные варианты.

Для создания и привязки аккаунта необходим доступ в интернет. Если доступа нет, то можно пропустить этот шаг и привязать смартфон после, через меню настроек. Для этого перейдите в раздел «Аккаунты» нажмите команду «добавить новый». Сервис аналогичным образом активирует «Мастера» следуя подсказкам которого пользователь сможет создать новый или активировать уже имеющийся профиль.

Интерфейс Андроида

После успешного запуска устройства и привязки его к Google-аккаунту можно перейти к изучению интерфейса устройства. Разные модели смартфонов могут иметь незначительные различия. Но в целом общий принцип остаётся прежним и каждую настройку, параметр или программу можно найти, интуитивно следуя по пунктам, имеющим сходный смысл.

Клавиатура

Клавиатура используется для набора текста во всех приложениях. В стандартной конфигурации имеет два режима для ввода: русский и английский. Переключение выполняется долгим нажатием на клавишу пробела или тапом на специальный значок с земным шаром.

При необходимости пользователь может добавить другие языки в список. Для этого нужно нажать на пробел и удерживать его до появления контекстного меню.

В списке выберите пункт «настроить способ ввода», откроются настройки клавиатуры. Выбираем «Языки ввода» и в открывшемся списке выбираем нужные. С помощью переключателей можно добавить или удалить любой вариант алфавита.

Стандартная раскладка букв аналогична клавиатуре компьютера. Чтобы добавить знаки препинания и цифр и нажмите на кнопку с цифрами и откройте следующую панель с символами. Значок стрелки делает буквы заглавными.

Жесты для управления

Рассмотрим основные жесты, предназначенные для управления гаджетом.

  • горизонтальный свайп перемещает пользователя между экранами рабочего стола, листает картинки;
  • вертикальный свайп сверху вниз раскрывает шторку с уведомлениями и переключателями, а также прокручивает длинный список;
  • движение пальцем вверх разблокирует экран и также применяется для прокрутки экрана;
  • для приёма звонка или отказа необходимо подхватить пальцем трубку в середине и потянуть в сторону нужного значка;
  • нажатие на ярлык открывает приложение;
  • длительное нажатие на ярлык позволяет его переместить в другое место рабочего стола.

Таким образом, для управления используются движения пальцем по экрану в нужную сторону и нажатие с различной степенью длительности.

Уведомления

Уведомления отображаются в шторке экрана. Принятое уведомление высвечивается в строке состояния (верхняя часть экрана). Для того чтобы прочитать оповещение необходимо развернуть шторку свайпом вниз.

Карточка уведомления содержит информацию кто совершил действие и в каком приложении. Для полного просмотра нужно открыть программу, из которой поступило уведомление.

Сами оповещения представлены в виде ленты. Последнее полученное оповещение числится в списке первым.

Рабочий стол

Рабочий стол смартфона на платформе Андроид представлен в виде набора экранов с расположенными на нём ярлыками приложений. Пользователь может по своему желанию перемещать приложения, для этого следует:

  • нажать на ярлык и удерживать его;
  • после того как ярлычок «прилипнет» к пальцу, не отрывая последнего, переместите в нужную область;
  • чтобы сместить ярлык на следующий экран подведите его к нужному краю;
  • чтобы удалить с рабочего стола переместите вверх к значку корзины.

Для сортировки приложений и создания папок используется длительное нажатие на пустом месте рабочего стола. Пользователь может удалять с экрана любые ярлыки. В дальнейшем нужную программу можно найти в диспетчере приложений.

Основные настройки

Следующий вопрос, на который мы ответим: какие основные настройки имеются в гаджете. Меню настроек разделено на несколько больших разделов, каждый из которых имеет несколько подразделов. Стоит отметить, что настройки имеют глубокую вложенность.

Как уже было упомянуто выше название пунктов и разделов может различаться в зависимости от типа устройства. Если пользователь решил научиться пользоваться смартфоном на Андроиде, ему стоит подробно изучит меню настроек, чтобы понимать возможности устройства.

Подключение и пользование интернетом

Разберёмся как подключить интернет к смартфону Андроид и воспользоваться им. Можно использовать домашний WiFi или мобильные сети, рассмотрим каждую из них в отдельности.

По WiFi

Для того чтобы подключиться к WiFi необходимо иметь активную точку доступа. Настройки подключения просты. Перейдите в настройки устройства и выберите раздел беспроводных сетей. Активируйте WiFi и в списке появившихся сетей выберите нужную.

Укажите пароль для соединения и дождитесь появления доступа в интернет. В целях экономии заряда, покидая квартиру, стоит отключать модуль WiFi. Сделать это можно через настройки, или в панели переключателей «шторки».

Через сотового оператора

Для соединения через сотовые сети необходимы специальные конфигурации. Сейчас операторы автоматически отправляют нужный набор при активации сим-карты в новом устройстве. Достаточно нажать «сохранить» для их применения.

Активация соединения через мобильные сети выполняется также в разделе настроек. Достаточно просто включить передачу данных.

Выход в интернет

Для выхода в сеть необходим браузер. Убедитесь, что смартфон подключён к интернету через один из модулей. Откройте браузер и введите ссылку в адресной строке или задайте поиск по требующемуся запросу.

Добавление новых приложений

Как только новичок научится пользоваться смартфоном на Андроиде, предустановленных приложений станет мало. Для того чтобы добавлять новые программы и приложения есть специальный Макет, который содержит большое количество доступных приложений. Программы устанавливать нужно только оттуда, продукты из сторонних источников могут причинить вред устройству.

Google Play Market

Для устройств на платформе Андроид предоставлен специальный магазин приложений Google Play. В нём есть разработки для решения любых задач пользователя. Предложения делятся на платные и бесплатные, помимо этого, присутствует разделение на категории и строка поиска для быстрого нахождения нужной программы.

Если смартфон привязан к аккаунту Google, то Маркет откроется без затруднений, в противном случае всё-таки придётся осуществить привязку.

После того как нужная программа найдена, перейдите на страницу с её описанием и нажмите на ссылку «Установить». В случае если устройство не поддерживает такое приложение кнопки на скачивание не будет, а будет лишь оповещение о том, что установить не удастся.

Установка антивируса

Так как смартфон имеет постоянный доступ в интернет, на него регулярно что-то скачивается и устанавливается, то в целях безопасности пользователю следует установить антивирус. Мобильный гаджет, как миниатюрный компьютер, подвергается таким же видам угроз. Злонамеренный софт способен похитить личные данные владельца и усложнить или даже полностью разрушить работоспособность устройства.

Файловый менеджер и работа с медиафайлами

Файловый менеджер представляет собой галерею медиафайлов устройства. Они могут располагаться в одной папке или быть разбиты на несколько с соответствующим названием категории.

Для просмотра фотографий откройте меню «Галерея». Снимки в нём расположены в порядке очерёдности создания от последнего к более ранним. В некоторых случаях может присутствовать разделение на подгруппы, в этом случае также: открываем и просматриваем.

Видео и аудио файлы обычно располагаются в другом разделе. Для прослушивания достаточно найти нужный файл и запустить его. Смартфон сам откроет проигрыватель и начнёт воспроизведение.

Камера

Если смартфон оснащён камерой с хорошими техническими характеристиками, то необходимо разобраться как делать снимки. В этом нет больших сложностей.

Найдите на рабочем столе приложение камера и откройте его. В рабочем режиме камера имеет оптимальный набор стандартных настроек, подходящих для создания фотографий. Достаточно навести объектив на нужный объект, чтобы он отразился в окне захвата изображения и нажать на кнопку съёмки. Все сделанные фотографии автоматически сохраняются в галерее.

При необходимости в рабочем окне можно открыть настройки камеры, включить вспышку, быстро просмотреть галерею. А также переключиться между фото и видео режимами или сменить активную камеру с основной на фронтальную.

Как поставить мелодию на звонок

Стандартные мелодии доступные для установки на звонок часто не радуют. Для того чтобы сменить текущую мелодию проделайте следующие действия.


Аналогичным образом можно сменить звук СМС, уведомления, будильника и т. д. кроме того можно выполнить процесс через контекстное меню самого аудиофайла, выберите «Применить, как…», а затем определите область применения.

Энергосбережение и оптимизация смартфона

Помимо решения задачи, как новичку научиться пользоваться смартфоном на Андроиде, стоит освоить вопрос об энергосбережении. Это станет особенно актуально в случае, когда пользователю перестанет хватать заряда аккумулятора.

В настройках устройства есть специальный пункт активирующий энергосберегающий режим. Но, помимо этого, можно самостоятельно оптимизировать устройство для сохранения заряда.

  • Снизьте яркость до минимального комфортного уровня.
  • Отключите автоповорот экрана и другие функции, использующие датчики.
  • Уберите все виджеты с рабочего стола и отключите обои, самый экономичный вариант – чёрный фон рабочего стола.
  • Отключите модули связи с интернетом и синхронизацию приложений.

Вышеописанные настройки сделают смартфон менее энергозатратным и позволят батарее продержаться значительно дольше.

Перенос информации

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

  • Используем синхронизацию с Google-аккаунтом. После того как новое устройство будет привязано к тому же профилю, что и предыдущее все данные синхронизируются с ним.
  • Контакты можно экспортировать на карту памяти и просто вставить её в новое устройство.
  • Каждый производитель имеет собственную программу, позволяющую выполнить перенос всех данных, включая диалоги в СМС и мессенджерах на новое устройство.
  • Резервное копирование позволит выполнить восстановление системы на новом устройстве. В меню настроек откройте раздел «Восстановление и сброс» и следуйте согласно подсказкам системы. Активируйте резервирование данных и режим автовосстановления. затем сделайте резервную копию.

Это далеко не все способы. Есть специальный софт, позволяющий осуществить перенос данных, а также расширенные настройки для формирования бекапа. Но это уже более углублённое изучение вопроса.

Пожаловаться на контент


  • Нарушение авторских прав Спам Некорректный контент Сломанные ссылки


  • Отправить

    Предположим, что вам повезло и Дед Мороз положил под елку новомодный гаджет. Большой популярностью в последнее время пользуются смартфоны, букридеры и планшеты на Раскрыть потенциал такого подарка поможет начинающим владельцам "умных" устройств гид Вестей.Хайтек.

    Что это? Android — это программа, при помощи которой вы управляете своим устройством. Ее история началась в 2005 году, когда Google купила одноименную компанию-разработчика и начала развивать платформу. В сентябре 2008-го была выпущена первая стабильная версия Android — 1.0 (под кодовым названием Apple Pie). За последующие четыре года вышло 14 "изданий" ОС. Релиз самой последней на сегодняшней день версии — 4.1/4.2 (Jelly Bean) — состоялся в июне 2012-го.

    Android, которая получает поддержку от крупнейшей в мире поисковой системы, быстро стала самой популярной мобильной ОС в мире. Ее успеху во многом способствовала открытость исходного кода и политика Google, которая разрешает производителям бесплатно устанавливать Android на свою продукцию. "Робота" предпочитают такие крупные компании, как HTC, Samsung, Sony и Motorola.

    — Если нужно срочно пополнить баланс телефона или Интернета, оплатить услуги ЖКХ, купить билет или просто перевести деньги. К вашим услугам — десятки приложений от крупных платежных систем и банков. В Google Play, например, есть "Яндекс.Деньги", Webmoney, QIWI, "Альфа-Банк", "Русский Стандарт", "ТКС Банк" или Home Credit Bank.

    — Сориентироваться на местности или построить маршрут для поездки на автомобиле помогут

    В этой серии статей я расскажу о внутреннем устройстве Android  -  о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.


    Статьи серии:

    • Как работает Android, часть 1

    Немного фактов

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


    Android  -  свободный и открытый проект. Большинство исходного кода (который можно найти на ) распространяется под свободной лицензией Apache 2.0.


    Компания Android Inc. была основана в 2003 году и в 2005 году куплена Google. Публичная бета Android вышла в 2007 году, а первая стабильная версия -  в 2008, с тех пор мажорные релизы выходят примерно раз в год. Последняя на момент написания стабильная версия Android  -  7.1.2 Nougat.


    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), а собственная минималистичная реализация под названием , оптимизированная для встраиваемых (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:


    user@desktop-linux$ 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, автоматически получают последние улучшения и исправления уязвимостей.


    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.

    Binder

    Binder  -  это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия.


    Разработка Binder началась в Be Inc. (для BeOS), затем он был портирован на Linux и открыт. Основной разработчик Binder, Dianne Hackborn, была и остаётся одним из основных разработчиков Android. За время разработки Android Binder был полностью переписан.


    Binder работает не поверх System V IPC (которое даже не поддерживается в bionic), а использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl) на «виртуальном устройстве» /dev/binder . Со стороны userspace низкоуровневая работа с Binder, в том числе взаимодействие с /dev/binder и marshalling/unmarshalling данных, реализована в библиотеке .


    Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.


    Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по.aidl -файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.


    Для Java-кода в процессе-клиенте прокси-объект выглядит как обычный Java-объект, который реализует наш интерфейс, и этот код может просто вызывать его методы. При этом сгенерированная реализация прокси-объекта автоматически сериализует переданные аргументы, общается с процессом-сервисом через libbinder, десериализует переданный назад результат вызова и возвращает его из Java-метода.