1. Особенности операционной системы Android
электронный образовательный ресурс

Косинов Андрей Геннадьевич

Особенности операционной системы Android
Одно из главных преимуществ платформы Android - ее открытость.
Операционная система Android построена на основе открытого исходного
кода и находится и свободном распространении. Это позволяет разработчикам
получить доступ к исходному коду Android и понять, каким образом
(реализованы свойства и функции приложений. Любой пользователь может
принять участие в совершенствовании операционной системы Android. Для
этого достаточно отправить отчет об обнаруженных ошибках
(
http://sowteumdroid.com/source/rcport-bugs.html), либо принять участие в
одной из дискуссионных групп Open Source Project
(http://source.android.com/community/index.html). В Интернете доступны
различные приложения Android с открытым исходным кодом, предлагаемые
компанией Google и рядом других производителей.
Открытость платформы способствует быстрому обновлению. В отличие
от закрытой системы iOS компании Apple, доступной только на устройствах
Apple, система Android доступна на устройствах десятков производителей
оборудования (OEM, Original Equipment Manufacturer) и
телекоммуникационных компаний по всему миру. Все они конкурируют
между собой, что идет на пользу конечному потребителю.
При разработке приложений Android используется Java - один из
наиболее распространенных языков программирования. Использование Java
стало логичным выбором для платформы Android, потому что это мощный,
свободный и открытый язык, известный миллионам разработчиков. Опытные
программисты Java могут быстро освоить Android-программирование,
используя интерфейсы (Google Android API (Application Programming
Interface) и другие разработки независимых фирм.
Язык Java является объектно-ориентированным, предоставляет
разработчикам доступ к мощным библиотекам классов, ускоряющих
разработку приложений. Программирование графического интерфейса
пользователя управляется событиями. Помимо непосредственного написания
кода приложений можно воспользоваться средами разработки Eclipse и
Android Studio, позволяющими собирать графический интерфейс из готовых
объектов, таких как кнопки и текстовые ноля, перетаскивая их в определенные
места экрана, добавляя подписи и изменяя их размеры. Эти среды разработки
позволяют быстро и удобно создавать, тестировать и отлаживать приложения
Android.
Многие современные смартфоны Android сочетают в себе функции
мобильных телефонов, интернет-клиентов, МРЗ-плееров, игровых консолей,
цифровых фотоаппаратов и многого другого. Эти портативные устройства
оборудованы мультисенсорными экранами. Простые прикосновения пальцев
позволяют легко переключаться между использованием телефона, запуском
Приложений, воспроизведением музыки, просмотром веб-страниц и т. д. На
экране может отображаться клавиатура для ввода электронной почты и

текстовых сообщений, а также ввода данных в приложениях (некоторые
устройства Android также оснащаются физическими клавиатурами).
Мультисенсорный экран позволяет управлять устройством с помощью
касаний и жестов.
В комплект поставки устройств Android входят различные стандартные
приложения, набор которых зависит от устройства, производителя или
оператора мобильной связи. Обычно это приложения Телефон (Phone),
Контакты (People), Сообщения (Messenger), Браузер (Browser), Калькулятор
(Calculator), Календарь (Calendar), Часы (Clock) и Фото (Photos).
Веб-сервисы (web services) представляют собой программные
компоненты, хранящиеся на одном компьютере, к которым могут обращаться
приложения (или другие программные компоненты) с другого компьютера по
Интернету. На базе веб-сервисов могут создаваться мэшапы (mashups),
ускоряющие разработку приложений путем комбинирования веб-сервисов,
используемых в различных организациях, с различными типами вводимой
информации. Например, сервис может комбинировать фотографии,
публикации в «Твиттере» и карты Google Maps, что дает возможность
познакомиться с разными странами по фотографиям других пользователей.
ОС Android всегда позволяла запускать множество различных
приложений и все они оставались в памяти и даже могли работать в фоне. Вы
открываете браузер, вводите адрес и, пока загружается страница, запускаете
почтовый клиент и читаете письма. Все как на десктопе, с тем исключением,
что вам не нужно заботиться о закрытии приложений, система сделает это
сама, когда оперативная память подойдет к концу или ее не хватит для
размещения запускаемого приложения (само собой, в первую очередь в расход
пойдут редко используемые приложения). Этот механизм называется

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 не стал жить дольше, так что неизвестно,
сработал ли этот механизм вообще.
И наконец, в Android 8.0 Google пошла на радикальный шаг — запретила
работу фоновых служб. Но с двумя исключениями:
Приложение в некоторых случаях, например когда оно находится на
экране, может запускать службы, но Android прибьет их после ухода
приложения в сон.
Видимые пользователю службы до сих пор разрешены. Это так
называемый foreground service, служба, которая видна в панели уведомлений
и имеет иконку в статусбаре.
Казалось бы, да, службы — это зло, но как теперь быть таким
приложениям, как противоугонное, которое должно работать незаметно в
фоне? Или тот же почтовый клиент? Из-за необходимости периодически
проверять почту он должен висеть в панели уведомлений?
На самом деле нет. Google шла к запрету служб еще с версии 5.0, где
появился так называемый JobScheduler. Это специальная подсистема, которая
позволяет приложениям попросить Android выполнить ту или иную работу в
такое-то время или при возникновении такого-то события (подключение к
интернету, например). И да, JobScheduler сильно напоминает аналогичную
функцию из iOS.
Вопреки расхожему мнению, Android с самых первых версий
использовал песочницы для изоляции приложений. И реализованы они были
весьма интересным образом. Каждое приложение запускалось от имени
отдельного пользователя Linux и, таким образом, имело доступ только к
своему каталогу внутри /data/data.

Рис. 1. Работу Binder обеспечивают драйвер в ядре Linux и Service Manager
Друг с другом и с операционной системой приложения могли общаться
только через IPC-механизм Binder, который требовал авторизации на
выполнение того или иного действия. Этот же механизм использовался и для
несколько других целей: с его помощью система оповещала приложения о
системных событиях, таких как входящий вызов, пришедшее СМС,
подключение зарядки и так далее. Приложения получали сообщения и могли
на них отреагировать.
Эта особенность дала Android очень широкие возможности
автоматизации, о которых мы знаем благодаря таким приложениям, как
Tasker, Automate или Locale. Все эти приложения доступны и для Android 8,
разве что некоторые опасные возможности, такие как включение/выключение
режима полета, теперь запрещены для использования обычными
приложениями.
Система оповещения базируется на интентах (intent), специальном
механизме, реализованном поверх Binder и предназначенном для обмена
информацией между приложениями (или ОС и приложениями), а также
запуска компонентов приложений. С помощью интентов можно оповещать
приложения о событиях, попросить систему открыть приложение для
обработки определенных типов данных (например, чтобы открыть
определенную страницу в браузере, достаточно послать широковещательный
интент со ссылкой на страницу, и на него откликнутся все приложения,
способные отображать веб-страницы, либо только дефолтовый браузер) или
просто запустить компонент того или иного приложения. Например,
приложения в Android запускаются не напрямую, а с помощью интентов.
К сожалению, как и службы, интенты стали проблемой для Google и
пользователей Android. Дело в том, что широковещательные интенты,

используемые для уведомления приложений о событиях, приходят сразу ко
всем приложениям, которые заявили, что способны на них реагировать. А
чтобы приложение смогло среагировать на интент, его надо запустить.
Картина получается такая: на смартфоне есть двадцать приложений, которые
могут реагировать на интент android.net.conn.CONNECTIVITY_CHANGE, и
при каждом подключении к сети и отключении от нее система запускает эти
приложения, чтобы они смогли среагировать на интент. Как это сказывается
на энергопотреблении — представьте сами.
Google исправила это недоразумение опять же в Android 8.0. Теперь
приложения могут регистрировать обработчики широковещательных
интентов только во время своей работы (за небольшими исключениями).
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.
Именно поэтому на свет появился проект microG, задача которого —
воссоздать самую важную функциональность сервисов Google в открытом
коде. Уже сейчас microG позволяет получить доступ к своему аккаунту,
активировать push-уведомления, доступ к картам Google и определению
местоположения по сотовым вышкам. И все это при размере в четыре мега и
почти полном отсутствии требований к оперативке и ресурсу батареи.
У проекта есть собственная сборка прошивки LineageOS, которая из
коробки включает в себя microG и все необходимые для его работы
модификации.
Android основан на ядре Linux. Ядро управляет ресурсами смартфона, в
том числе доступом к железу, управлением оперативной и постоянной
памятью, запуском, остановкой и переносом процессов между ядрами

процессора и многими другими задачами. Как и в любой другой ОС, ядро —
это сердце Android, центральная часть, без которой все остальное развалится.
Рис. 2. Структура 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-девайсе можно
без всяких проблем запустить полноценный Linux-дистрибутив. Один нюанс
— доступ к нему можно будет получить либо только через консоль, либо
используя VNC-соединение. Также существует проект Maru OS, позволяющий
использовать смартфон в качестве ПК на базе Debian при подключении
к монитору. Ту же функцию обещает Samsung при подключении своих
смартфонов к монитору с помощью дока DeX.
Начиная с версии 4.4 Android умеет использовать систему
принудительного контроля доступа SELinux для защиты от взлома и
получения прав root. SELinux разработана Агентством национальной
безопасности США и, если не вдаваться в детали, позволяет ограничить
приложения (в том числе системные низкоуровневые компоненты) в
возможностях. И речь вовсе не о полномочиях, которые юзер предоставляет
приложениям, а о таких вещах, как системные вызовы и доступ к тем или иным
файлам, невзирая на стандартные права доступа UNIX.
Серия уязвимостей Stagefright, поразивших Android несколько лет назад,
позволяла получить контроль над устройством, просто заставив юзера открыть
пришедшую MMS или специальный файл в браузере. Проблема состояла в
мультимедиафреймворке Stagefright, содержащем сразу несколько
уязвимостей переполнения буфера. При открытии специальным образом
подготовленного мультимедиафайла эксплоит использовал уязвимость и
запускал на устройстве код от имени Stagefright (который работал под рутом).
Все эти ошибки Google благополучно закрыла, а также поработала над
модуляризацией кода фреймворка и его запуском в специальных доменах
SELinux. Эти домены запрещают компонентам, ответственным за обработку
мультимедиа, использовать большую часть системных вызовов Linux,
включая системные вызовы группы execve, которые как раз и были причастны
к запуску зловредного кода.
Сегодня SELinux используется для защиты почти всех системных
компонентов Android. И это стало причиной резкого снижения количества
найденных багов в Android. Но привело к фокусировке взломщиков на ядре, а
точнее тех самых закрытых драйверах, аудит кода которых никто не проводил
и безопасность которых не гарантирована
Android определенно не самая стандартная ОС. Многие свои черты она
позаимствовала из операционной системы Inferno, к созданию которой
приложили руку разработчики языка С, UNIX и Plan 9.

 

Скачать:

ВложениеРазмер
PDF icon 1._osobennosti_operatsionnoy_sistemy_android.pdf469.19 КБ

Предварительный просмотр:

По теме: методические разработки, презентации и конспекты

Методическое пособие по выполнению практического занятия №1 "Изучение структуры операционной системы" по дисциплине "Операционные системы и среды" для специальности 230113 Компьютерные системы и комплексы

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению практического занятия №2 "Работа с основными командами операционной системы" по дисциплине "Операционные системы и среды" для специальности 230113 Компьютерные системы и комплексы

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению практического занятия №6 "Работа в командной строке операционной системы Windows" по дисциплине "Операционные системы и среды" для специальности 230113 Компьютерные системы и комплексы

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению практического занятия №4-5 Работа с каталогами в операционных системах. Работа с файлами в операционных системах" по дисциплине "Операционные системы и среды" для специальности 230113 Компьютерные системы и комплексы

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению практического занятия №8 "Управление процессами и приоритетами в операционных системах" по дисциплине "Операционные системы и среды" для специальности 230113 Компьютерные системы и комплексы

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению практического занятия №2 "Работа с основными командами в операционной системе (на примере MS-DOS)" по дисциплине "Операционные системы" для специальности 230115 Программирование в компьютерных системах

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

2. Версии операционной системы Android

Версии операционной системы AndroidОперационная система Android была разработана компанией Android,Inc., которая в 2005 году была приобретена компанией Google. В ноябре 2007г. был сформирован консорци...