Введение в операционную систему Android

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

После выпуска iPhone и Windows Lumia Series, то есть телефонов, связанных с Microsoft Windows, Google захотел сделать то же самое. Но они хотели что-то, что может быть открытым исходным кодом. Основной причиной этого было то, что любой мог отлаживать его, изменять любые изменения по своему желанию. Затем пришла идея Linux. Linux - это полностью открытая операционная система, и она широко принята сообществом во всем мире. Это одна из тех операционных систем, которая используется даже больше, чем Windows или Mac OSX. Кроме того, в Linux есть возможность запускать практически все, что может быть запущено на Mac или Windows. Таким образом, Google решил разработать операционную систему для сотового телефона с той же базовой внутренней оболочкой, что и в Linux, чтобы она была совместима практически со всем, и внешняя оболочка была бы разработана так, как, когда и как она требуется.

Операционная система Android как проект с открытым исходным кодом (AOSP)

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

Как вы можете видеть на приведенном выше изображении, первый уровень - это Application Framework, второй - это прокси-серверы Binder IPC, третий - это системные службы Android, четвертый - HAL или полная форма, представляющая уровень аппаратной абстракции, и последний. будучи ядром Linux. Теперь, как я уже говорил ранее, вы можете видеть, что единственной частью Linux, из которой состоит операционная система Android, является ядро ​​Linux. Теперь давайте рассмотрим их все по одному.

Android Application Framework

Эта платформа приложений используется разработчиками приложений для Android. Эта часть Android как минимум имеет отношение к аппаратному уровню. Приложения для Android запрограммированы на языке Java. После программирования приложения инструменты Android SDK помогают скомпилировать данные и файлы ресурсов, такие как XML-файлы, файлы JAR, файлы манифеста и другие изображения и прочее, в один архивный пакет с расширением .apk. Этот файл apk можно использовать для установки приложения одним щелчком мыши на устройствах Android. Теперь, поскольку операционная система Android ведет себя как среда Linux, поведение приложения здесь тоже самое. Каждое приложение рассматривается как отдельный пользователь от другого и работает на своей собственной виртуальной машине. Это делает программный код приложения изолированным, а также предотвращает заражение от других, если это не указано явно. Каждое другое приложение имеет свой собственный идентификатор пользователя, а каждый другой процесс имеет собственную виртуальную машину.

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

Binder IPC известен как Binder Inter-Process Communication. Этот интерфейс позволяет программисту создавать приложения для связи с другими приложениями. Чаще всего общаются не приложения, а процессы. Binder IPC помогает запускать несколько процессов одновременно на параллельном уровне. Эта реализация связующего поставляется через ядро ​​операционной системы Android. Теперь возникли вопросы о том, почему механизм связывания должен оставаться в ядре и почему он не может работать из механизмов Linux IPC? Основная причина этого заключается в том, что механизм связывания избегает ненужного распределения пространства в отличие от других механизмов IPC в системе Linux. Если вы слышали о термине «магия в python», то именно так может выглядеть Binder IPC для разработчика приложений, поскольку он полностью скрыт от них и, по-видимому, просто работает, в отличие от инфраструктуры высокого уровня, где Вы должны заставить это работать это явно. Это фактически позволяет высокоуровневой структуре взаимодействовать со службами операционной системы Android.

Системные сервисы операционной системы Android

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

Запущенные Услуги

Запущенные сервисы обычно запускаются, когда приложение требует этого. Однако тип обслуживания Started обычно выполняет только одну операцию и ничего не возвращает.

Связанные Услуги

Ограниченные сервисы предлагают интерфейс связи клиент-сервер. Связанная служба работает до запуска приложения переднего плана, а затем останавливается после уничтожения действия приложения.

Системные сервисы android предоставляют пользователям необходимую информацию для того, чтобы они правильно работали. И эти коммуникации между системными службами и пользовательскими приложениями осуществляются с помощью Binder IPC из ядра. Теперь это может удивить, но не все приложения в Android написаны на Java. Некоторые из них написаны на C и C ++. Те приложения, которые должны быть в тесном контакте с оборудованием, написаны на C и C ++. Основная причина этого заключается в том, что большую часть времени системные службы должны находиться в постоянном контакте с оборудованием. Это делает очень важным, чтобы скомпилированный фрагмент кода был чрезвычайно быстрым. А когда дело доходит до аппаратного ускорения и высокой производительности, C намного быстрее, чем Java или любой другой язык.

Аппаратные службы, которые постоянно используются, например, датчики приближения, акселерометр или сенсорный экран, должны быть написаны на C. Другое оборудование, такое как Камера или звук, в основном использует вызовы JNI. Таким образом, если вы когда-либо заметите, сенсорные экраны всегда будут быстрее, чем запуск камеры или воспроизведение песни через музыкальный проигрыватель.

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

Рекомендуемые курсы

  • Обучение сертификации ИТ-безопасности
  • Полный курс по Ruby on Rails
  • Профессиональное обучение CSS
  • Программа на HTML5 и CSS3

Уровень аппаратной абстракции

HAL или Hardware Abstraction Layer специально разработан для поставщиков. Разработчикам приложений здесь мало или почти нечего делать. Этот слой помогает вставить функциональность без каких-либо изменений в системе. Каждая другая система имеет HAL по-разному, так как они сделаны для конкретного устройства. HAL состоит из двух типичных структур: Модуль и Устройство.

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

В Linux приложения взаимодействуют с базовым оборудованием через системные вызовы. Но в операционной системе Android приложения взаимодействуют с оборудованием через API Java.

Ядро Linux

Компиляция ядра Linux для операционной системы Android аналогична компиляции его для базовой ОС Linux. Разница лишь в том, что версия для Android немного более продвинутая, чем версия для Linux. Основная причина в том, что ядро ​​Android состоит из дополнительных функций, таких как wakelocks, двойное нажатие для разблокировки и другие подобные функции, встроенные в мобильное операционное устройство. Такие функции, как wakelock, важны, поскольку ядро ​​будет работать на портативном устройстве, и оно должно быть более агрессивным в управлении памятью и батареями; в отличие от базового Linux, где управление энергопотреблением не является проблемой. Эти дополнительные требования возникают в ядре, а не в системе, поскольку эти вещи не должны влиять на встроенные драйверы.

Всякий раз, когда вы слышите, как кто-то говорит «это Linux», они обычно имеют в виду ядро, поскольку оно является самой основной, но самой важной частью любой операционной системы. Основная причина, по которой android основан на ядре Linux, заключается в том, что он имеет открытый исходный код. Любой может пойти дальше и модифицировать ядро ​​Linux без каких-либо аппаратных ограничений или даже каких-либо проблем с лицензионным платежом.

Разница между Linux и Android

Итак, теперь мы наконец достигли самой запутанной стадии этого блога: Linux против Android. Люди обычно считают Android дистрибутивом Linux, но я бы сказал, что они правы только на 50%. Всякий раз, когда загружается операционная система Android, она в основном загружает ядро, как и любой другой дистрибутив Linux, но остальная часть программного обеспечения полностью отличается от Linux. Приложения Linux не будут работать на Android, а также наоборот, если они не скомпилированы в среде chroot. Библиотеки, представленные в типичном дистрибутиве Linux и Android, полностью отличаются друг от друга. В принципе, вы не можете получить доступ к корневому терминалу в Android, как в случае с Linux. Это основная причина, почему люди обычно устанавливают Busybox, SuperSU и его двоичные файлы после рутирования, чтобы у них был более детальный доступ командной строки к ядру и оболочке. В Android нет оболочки по умолчанию, но ее можно получить, установив эмулятор терминала из магазина Google Play. Эмулятор терминала выглядит так:

Среда выполнения Android работает на виртуальной машине Dalvik. Эта Dalvik VM на самом деле является интерпретатором языка программирования Java. Вся среда выполнения Android написана на Java в Android, и, поскольку все приложения Android написаны на Java, становится намного проще и плавнее запускать приложения в виртуальной среде. А так как все приложения и даже среда выполнения написаны на Java, любому разработчику становится намного проще настраивать каждую часть операционной системы Android. Android обычно разрабатывался как однопользовательская операционная система (в отличие от леденца и зефира, где может быть несколько пользователей). Чтобы на самом деле сделать это проще, позвольте мне выразить это в такой форме. Приложения Android - это не что иное, как процессы Linux в конце, и именно так они и работают. И поскольку я уже говорил выше, что у каждого приложения есть свой собственный процесс, ядру становится проще создавать отдельный UID для каждого процесса и обрабатывать файлы и память приложения без каких-либо дополнительных усилий.

На самом деле есть нечто большее, чем основы операционной системы Android, о которых я упоминал выше. У Android есть основной процесс, известный как «Zygote», и он превосходен в том, что он делает. Этот процесс фактически запускается с командами инициализации при загрузке Android. Я не буду вдаваться в подробности, но я думаю, что основ операционной системы Android на самом деле достаточно, чтобы вы начали работать с Android. Чтобы получить больше информации, вы можете посетить source.android.com и developers.android.com, который является официальным веб-сайтом от Google для любого обновления для Android.

Рекомендуемые статьи

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

  1. HTML5 против Flash - как они отличаются
  2. Лучшие 8 полезных приложений Office Suite для вашего Android
  3. Топ 5 бесплатных эмуляторов Android для ПК
  4. Вопросы об интервью с Android - 10 самых полезных вопросов
  5. Карьера в разработке Android
  6. 33 главных отличия iPhone от Android