Андроид как работает?

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

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

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

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

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

Android  —  свободный и открытый проект. Большинство исходного кода (который можно найти на https://source.android.com) распространяется под свободной лицензией 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), а собственная минималистичная реализация под названием 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, автоматически получают последние улучшения и исправления уязвимостей.

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 данных, реализована в библиотеке libbinder.

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

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

Еще по теме:   Как перенести контакты с Андроида на Андроид через блютуз?

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

Stub работает наоборот: он принимает входящие вызовы через libbinder, десериализует аргументы, вызывает абстрактную реализацию метода, сериализует возвращаемое значение и передаёт его процессу-клиенту. Соответственно, для реализации сервиса программисту достаточно реализовать абстрактные методы в унаследованном от Stub классе.

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

Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.

Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов  —  например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.

Подробнее про Binder можно узнать по этим ссылкам:

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

habr.com

Как использовать ОС Андроид максимально удобно

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

Работа в ОС Андроид

Совет №1 – Контакт на рабочем столе. На рабочем столе устройства можно добавлять не только иконки виджетов и приложений, но и контакты. Для осуществления этого действия необходимо нажать на пустое место экрана и держать до появления меню. Затем выбрать ярлык и далее контакты. После этого выбрать нужный контакт.

Если вы решили приобрести планшет Асер, то стоит посетить интернет магазин Sokol. Именно там вы найдете большой ассортимент устройств на ОС Андроид и их комплектующих.

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

Совет №3 –Быстрый доступ к настройкам. На рабочий стол устройства можно добавить виджет «Управления питанием». С помощью него легко, всего пару нажатиями, можно переключать режимы беспроводной связи, GPS, управлять подсветкой. При этом не надо заходить в меню «Настройки» и долго искать необходимый раздел.

Совет №4 –Синхронизация закладок и контактов. Для осуществления синхронизации данных на устройствах с операционной системой Андроид необязательно ставить стороннее программное обеспечение. Устройство под управление этой ОС должно быть обязательно привязано к аккаунту Gmail. Все добавленные контакты автоматически сохраняются в профиле Google и могут быть восстановлены. При изменении контактов в профиле через компьютер, контакты автоматически обновятся и в смартфоне.

Совет №5 –Быстрый ввод специальных символов. При наборе текста получить быстрый доступ к специальным символам можно путем зажатия кнопки. Таким образом, получится быстро выбрать знак вопроса, точку или другой символ, не переключаясь на их раскладку.

Совет №6 –Установка сторонних приложений. В отличие от Apple, в Андроид отсутствует привязка по установке приложений и аккаунту. Любое приложение можно установить. Для этого необходимо закачать инсталляционный файл на устройство и включить опцию «Неизвестные источники», которая находится в разделе «Настройки-Приложения». Закачанный файл должен иметь расширение .apk.

Совет №7 –Работа в 2g/3g сетях. Мобильный интернет зачастую предоставляется с лимитом по трафику, в отличие от домашнего. Для того чтобы контролировать объемы скачанной информации и получить быстрый доступ к его отключению рекомендуется использовать приложение 3G Dog. С помощью него легко всего одним нажатием значка на рабочем столе выключить мобильный интернет, а также настроить квоту траффика по дням, неделям, месяцам. Также доступна функция оповещения о превышении установленных лимитов.

  • Автор: Татьяна
  • Распечатать
Еще по теме:   Как перекинуть контакты с Андроида на компьютер через USB?

fans-android.com

Как работает андроид?

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

Основное назначение операционной системы (ОС) «Андроид», как и у любой другой ОС — служить посредником между прикладными программами и «железом» (микропроцессором, разнообразными периферийными устройствами компьютера). Каждая программа, которую вы запускаете, вызывает нужные ей функции ОС и в удобном виде выдает на экран результаты работы этих функций. Даже «Рабочий стол», который вы видите, включая отображаемое на телефоне — это результат работы «Андроида» в интерпретации одной из прикладных программ. Эта программа отправила в ОС заказ нарисовать фоновое изображение и указала файл, в котором хранится информация о нем. Система с использованием процессора рассчитала, в каком месте дисплея надо поместить точки определенных цветов и сделала это с использованием драйвера дисплея. Точно также по заказу программы ОС поместила на дисплее пункты меню управления и ярлычки программ. А когда вы начнете выбирать эти пункты, прикладная программа будет передавать «Андроиду» заказы на исполнение выбранных действий — например, на запуск редактора СМС-сообщений. После этого уже редактор сообщений будет точно также общаться с ОС, исполняя ваши желания. «Андроид», как любая современная система, может обслуживать огромное число одновременно работающих программ. Но емкость памяти и производительность процессора, имеющиеся в ее распоряжении, накладывают свои ограничения. ОС приходится следить за загруженностью «железа» и его способностью выполнять запросы всех программ. Поэтому иногда приходится видеть, что то или иное приложение вдруг закрывается — это «Андроид» сокращает нагрузку. Он убирает ту программу, которая ему кажется неоправданно прожорливой в отношении ресурсов мобильного устройства. Продукт Google отличается от своего главного конкурента (iOS от Apple) в первую очередь тем, что прикладные программы для «Андроида» может создавать кто угодно. Эта ОС построена на базе ядра бесплатной системы Linux, поэтому любой разработчик программного обеспечения точно знает как она работает. С «Андроидом» такие компании не испытывают ни технических, ни юридических проблем, в отличие от iOS, у которой код закрыт и все прикладные программы являются частью ОС. Пользователю мобильного устройства эта особенность Android тоже очень кстати — мы можем самостоятельно выбирать те приложения, которые нам больше нравятся, а не ограничиваться лишь выбором разработчиков операционной системы.

Оцените статью!

imguru.ru

Как работает андроид

«Андроид» — это специальная система для мобильных устройств разработана американской компанией Google. Данная система является одной из самых популярных и распространённых во всем мире. Андроид используют как систему не только на мобильных, но и на планшетных устройствах. Совсем недавно эту систему начали использовать на ново разработанных Smart-телевизорах. Принцип работы практически не отличается от других операционных систем.

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

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

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

androidphones.ru

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

×
Рекомендуем посмотреть
Adblock
detector