Как работает 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:
Из других знакомых компонентов в 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, о нескольких его предшественниках и о базовых механизмах обеспечения безопасности.
Источник
Программы для Андроид — ТОП-30 самых полезных приложений 8 типов
Эти утилиты должны быть у каждого.
Приложение – это не только хорошее дополнение к функционалу смартфона, но и незаменимый помощник.
После установки на телефон необходимой утилиты пользователю станут доступны новые возможности: редактирование файлов, красивое оформление фото в аналогах фотошопа, создание музыки, скачивание игр.
В этой статье представлены лучшие программы для Андроид, которые пригодятся каждому пользователю.
Системные программы
Clean Master – бесплатная и необходимая программа для поддержания плавного функционирования смартфона.
- очищает кэш;
- защищает личные данные при помощи кода;
- завершает ненужные фоновые процессы, повышая продуктивность телефона;
- удаляет неиспользуемые приложения.
- убирает дубликаты и испорченные файлы;
- освобождает память.
- после удаления какого-либо приложения сразу появляется предложение скачать что-то взамен.
Скачать Clean Master
Adb RUN – утилита подходит для прошивки Андроид через компьютер. Прошивка происходит по кабелю USB, без него получить root права невозможно.
- раздача интернета с ПК на Андроид;
- управление Андроидом с ПК;
- возможность прошивки в Fastboot и Sideload;
- объединение внутренней памяти с SD.
- удаление графического ключа;
- восстановление системы;
- создание действий для автоматизации программы.
- несовместима с XP;
- отсутствие русского языка в инструкции.
Скачать Adb RUN
Smart Launcher Pro 3 – позволяет организовать главный экран, проверяет аккумулятор и приводит в порядок систему телефона.
- контроль за обновлением программ;
- защита данных с помощью пин-кода;
- настройка каталога приложений по частоте использования.
- красивые темы и обои;
- функции жестов и горячих клавиш;
- потребление заряда батареи минимальное.
Google Chrome – оперативный и безопасный браузер. Оснащен всевозможными функциями для удобства использования. Любая информация всегда у вас под рукой.
- высокая скорость поиска информации;
- безопасен в применении и оповещает об угрозах;
- продуктивно работает с множеством вкладок;
- автоматически переводит страницы благодаря встроенному переводчику;
- возможность голосового управления.
- синхронизация всех андроид-устройств;
- наличие режима инкогнито;
- настройка браузера по личным параметрам (темы, расширения).
Инструменты
HUD Антирадар – с помощью одной бесплатной утилиты ваш телефон превращается в настоящий антирадар.
- цифровое определение скорости;
- предупреждение о видеорегистраторах и скрытых камерах;
- контроль скорости.
- звуковое оповещение о превышении;
- меню на русском языке;
- без рекламы.
Shareit – пользователям Андроид, которые часто обмениваются файлами, фото и документами, стоит обратить внимание на эту полезную программу. Обмен происходит без использования сетей и синхронизируется с любым устройством (планшет, ПК, смартфон).
- обмен материалами на высокой скорости;
- отсутствие лимита на объем передаваемых данных;
- можно скачать бесплатно;
- удобное меню;
- не расходует интернет-трафик.
- необходимо своевременно очищать память телефона, иначе возникнут сбои в обмене файлами.
Скачать SHAREIT
Google Переводчик – доступный перевод на 103 языка на бесплатной основе.
- быстрый языковой перевод;
- разговорный перевод;
- возможность переводить в оффлайн-режиме.
- камера распознает текст и переводит его;
- используемые фразы и выражения можно сохранять.
Антивирус DR.WEB Light – скачивание может быть небезопасно. Поэтому придумана бесплатная мобильная версия для смартфонов, которая почистит память, просканирует устройство на вирусы и уничтожит их при обнаружении.
- полная и выборочная проверка системы на вирусы;
- активная защита от Трояна;
- защита карты памяти от заражения вирусами;
- перемещение зараженных файлов в карантин и их восстановление.
- не расходует батарею;
- базы автоматически обновляются.
- в версии Lite предложен минимальный пакет функций для защиты. Больше инструментов в платной версии.
Скачать DR.WEB LIGHT
Яндекс.Кошелек – все скидочные карты в одной программе. Удобно, доступно и не надо ничего искать по карманам.
- электронные денежные операции (перевод, оплата, пополнение);
- оплата счетов, коммунальных услуг, мобильной связи;
- оформление покупок в интернете.
- сохранение банковских и скидочных карт для последующих платежей;
- удобство вывода средств фрилансерам;
- сохранение важных платежей в избранном.
- значительных недостатков нет, все удобно и понятно.
Скачать Яндекс.Кошелек
Подробнее о том, как зарабатывать на телефоне, вы можете узнать из отдельной статьи.
Интересы
Duolingo – весьма популярное приложение для изучения английского языка. Заниматься могут как новички, так и профи для поддержки знаний.
- обучение иностранному языку в игровой форме, без зубрежки;
- предоставление уроков в аудио- и видеоформате, а также в форме разговорной речи.
- версия бесплатная;
- учеба проходит по нарастающей – все зависит от ваших успехов и количества ошибок;
- помощь обучающихся на форуме.
Runtastic – интересная утилита для спортсменов. Есть возможность вести личные заметки тренировок, достижений, просматривать советы и предложения, общаться с единомышленниками. Можно делиться мыслями в общей группе бегунов.
- запись результатов упражнений;
- наблюдение за достижениями;
- составление тренировок на свой вкус.
- подсчет калорий;
- выбор занятий по категориям;
- бесплатный ресурс;
- приложение предлагает множество марафонов и испытаний для мотивации к действиям.
Skyscanner – утилита для тех, кто много передвигается по миру. Здесь подобраны свободные номера в отелях, авиабилеты, доступный прокат автомобилей. Можно узнать цены на интересующую категорию заранее, воспользовавшись фильтром.
- поиск авиабилетов, отелей и машин напрокат;
- информация о снижении цен на билеты и бронировании номеров.
- дает возможность путешествовать, экономя средства;
- предоставление скидок;
- полезные ссылки (дешевые отели, доступная аренда машин, сезонное снижение цен на авиабилеты) в соцсетях.
- фильтр в поиске может неточно работать из-за обновлений.
Скачать SKYSCANNER
Happy color – занимательная игра для рисования и раскрашивания. Раскраска превосходно справляется со стрессом и заполняет время. Также подходит для малышей. Развивает внимание, творчество, располагает к расслаблению.
- раскраска по номерам;
- выбор рисунка по категориям.
- занимает не много места в телефоне;
- мало расходует батарею;
- подборка изображений от легкого уровня к сложному.
Литрес – необъятная интернет-библиотека, которая содержит множество произведений. Полезное приложение для чтения книг, которые классифицируются по жанрам. В наличии современная и классическая литература, стоит лишь выбрать на свой вкус.
- предоставление книг в бумажном, цифровом и аудио форматах на любых устройствах;
- удобный поиск в любой категории.
- сохранение любимых произведений в закладках, которые синхронизируются;
- своевременное обновление литературной базы;
- предпросмотр первых страниц произведения;
- наличие акций и скидок.
- во время чтения может выскочить реклама.
Скачать ЛитРес
Шагомер – для тех, кто желает быть в курсе своей активности. Вычисления можно приостановить при необходимости. Красивый дизайн и яркие темы. Все данные сохраняются в таблице.
- ведет подсчет сделанных шагов, пройденного расстояния, скорости передвижения и затраченного времени;
- считает калории.
- программа составляет графики и диаграммы потраченным калориям и времени;
- расчет ведется исходя из личных данных (рост, вес, пол и возраст);
- прогулка и подсчет активности одновременно.
- при заполненности памяти телефона программа может вылетать.
Скачать Шагомер
Мультимедиа
VideoShow Pro – популярная утилита для монтажа видео. Можно делать анимацию или видео из фото, обрезков картинок, надписей с включением визуальных эффектов.
- создание видео из фото и музыки;
- разработка фильмов с 3D-эффектом.
- наличие готовых шаблонов для новичков;
- широкий выбор фильтров и субтитров;
- шедевры можно закачать на ютуб;
- легкое управление с необходимым функционалом;
- создание клипов прямо в приложении.
- период для ознакомления 10 дней с малым функционалом, далее платное использование;
- во время обновления программы возможны сбои в нарезке видео.
Скачать VIDEOSHOW PRO
Tik Tok – рассчитано для создания клипов со спецэффектами, нарезками и музыкальным сопровождением. Можно реализовывать свои творческие идеи через видеомейкер и делиться ими с друзьями.
- создание видеороликов с использованием музыки;
- публикация клипов в соцсети.
- отличный выбор музыки и фильтров;
- работает на любых устройствах.
Ivi – лучшие фильмы и сериалы в отличном качестве всегда под рукой. Здесь собраны самые рейтинговые кино. База обновляется каждый день.
- просмотр фильмов и сериалов в высоком качестве;
- доступно на всех устройствах (смартфон, ПК, смарт ТВ).
- широкий каталог кино;
- первые 14 дней можно пользоваться за 1 рубль.
Zaycev.net – необходимый сервер для тех, кто любит качественную музыку. Приятный интерфейс, удобство в использовании и миллионы треков на ваш вкус.
- скачивание и прослушивание музыки.
- абсолютно бесплатный доступ к фонотеке;
- просмотр текста песни;
- сохранение всех скачанных треков в личном плейлисте.
Яндекс.Музыка – большой выбор списков музыкальных композиций по жанру, настроению, даже роду занятий.
- создание плейлистов;
- бесплатное скачивание треков на телефон;
- возможность поделиться музыкой с друзьями.
- удобно и доступно;
- бесплатный период 1 месяц;
- слушать музыку можно в приложении и на сайте;
- запоминание поиска.
- подписка 169 рублей;
- скачанные треки остаются недосягаемы без оплаты, хотя Яндекс утверждает обратное.
Скачать ЯНДЕКС.МУЗЫКА
Навигаторы
Яндекс.Такси – преимуществом являются минимальные затраты времени на ожидание машины. Оценить поездку может как пассажир, так и водитель.
- заказ такси через мобильное приложение, официальный сайт или пообщавшись с оператором.
- широкий спектр функций: детское кресло, перевозка животных и багажа, заказ машины ко времени;
- оплата наличными и безналичным способом;
- наличие чата с водителем.
Geozilla – шпион позволит вам знать, где находятся ваши близкие и даже домашние питомцы. Особенно подходит для контроля местонахождения ребенка.
- контроль за местонахождением человека;
- уведомление о маршруте.
- можно создавать списки покупок, доступные всем членам семьи;
- вносить заметки и напоминания.
- после обновления версии есть неточности в километраже.
Скачать GEOZILLA
Яндекс.Навигатор – отличная программа, чтобы не заблудиться в незнакомой местности. Проста в использовании.
- помогает построить маршрут от начала пути и до конца;
- учитывает пробки и аварии.
- поездки сохраняются;
- сервер бесплатный;
- показывается парковка в столицах России.
Офисные
Microsoft Word – доступность, простота в применении и отсутствие привязанности к ПК.
- форматирование, редактирование и набор текста;
- отправка его на печать и по электронной почте.
- знакомое меню как на ПК;
- распознает все форматы файлов;
- загрузка документов в облачное хранилище;
- удобные шаблоны для работы.
- при входе каждый раз надо регистрироваться.
Скачать MICROSOFT WORD
Microsoft Exel – все для расчета и анализа с безграничными возможностями.
- создание таблиц, формул и графиков;
- редактирование и форматирование текста.
- имеются шаблоны;
- сохранение работы в той зоне, где в последний раз производились действия.
- версия является бесплатной в том случае, если диагональ экрана составляет меньше 10,1 дюйма;
- функционирование на планшетах происходит через подписку Office 365.
Скачать MICROSOFT EXCEL
Google Keep – трудно удержать большое количество информации в голове. Выручит настоящий помощник в этом деле – заметки от Google.
- планирование покупок, расходов;
- запись идей, рецептов, питания.
- удобный и понятный интерфейс;
- возможность аудиозаписей;
- звуковое напоминание о событиях;
- синхронизации с вашими устройствами.
Общение и соцсети
Instagram – занимает лидирующее место среди приложений. Раскрутка своего бренда, услуг и интересов.
- редактирование снимков;
- обмен фото и видео;
- продвижение своих идей и творчества.
- возможность зарабатывать деньги, расширяя бизнес-идеи;
- публикация фото и видео фрагментами;
- создание коллажей из изображений.
WhatsApp – самый популярный из используемых мессенджеров. Безграничные возможности в общении.
- отправка текстовых сообщений;
- поддержка аудио и видео сообщений;
- звонки на другие мессенджеры.
- все функции бесплатные;
- вложение файлов в сообщения;
- создание чатов.
Разное
Brainly – списывать домашнее задание на перемене уже не модно. Гораздо лучше делать уроки вместе с одноклассниками, помогая друг другу.
- помощь с домашней работой;
- подготовка к тестам и экзаменам.
- ответы почти по всем предметам;
- развитие в игровой форме с помощью начисления баллов;
- бесплатная основа.
Госуслуги – отображение задолженности по штрафам, налогам, состояние пенсионного счета и размер материнского капитала.
- оказание государственных услуг дистанционно;
- получение справок и документов в электронном виде.
- оплата госпошлин со скидкой 30 %, штрафов 50 %;
- оформление документов;
- постановка на учет в дошкольные учреждения;
- регистрация ИП и машин;
- запись в медучреждения.
- из-за технических сбоев приложение может не открываться;
- неточности в наличии задолженностей, но система совершенствуется.
Скачать ГОСУСЛУГИ
Едадил – невероятно удобное мобильное приложение, в котором собраны действующие акции и скидки магазинов. Категории разнообразные: продукты, косметика, бытовая химия, корма для животных и бытовая техника.
- экономия денежных средств путем получения кэшбэка;
- мониторинг акций в магазинах.
- за сканируемые чеки начисляется кэшбэк по определенным категориям товаров;
- накопленными баллами можно расплатиться;
- купоны на скидки.
Заключение
Приложений великое множество и, конечно, не все предложены в списке. Мы старательно представили Top-Android.
Пользуйтесь своим Android по полной, извлекайте максимум возможностей и будьте мобильны!
Подробнее о том, как выбрать телефон и какая операционная система вам подойдет больше, Android или iOS – читайте в отдельных статьях.
А какими приложениями пользуетесь вы? Делитесь своим мнением и статьей с друзьями.
Источник