Андроид что это такое для чайников в телефоне
Перейти к содержимому

Андроид что это такое для чайников в телефоне

  • автор:

Андроид что это такое для чайников в телефоне

Логотип Android с 2019 года

Android — это мобильная операционная система, основанная на модифицированной версии ядра Linux и другого программного обеспечения с открытым исходным кодом, разработанная в первую очередь для мобильных устройств с сенсорным экраном, таких как смартфоны и планшеты. Android разрабатывается консорциумом разработчиков, известным как Open Handset Alliance, и коммерчески спонсируется Google. Он был представлен в ноябре 2007 года, а первое коммерческое устройство Android было выпущено в сентябре 2008 года.

Это бесплатное программное обеспечение с открытым исходным кодом; его исходный код известен как Android Open Source Project (AOSP), который в основном лицензируется по лицензии Apache. Однако большинство устройств Android поставляются с предустановленным дополнительным проприетарным программным обеспечением, в первую очередь Google Mobile Services (GMS), которое включает в себя основные приложения, такие как Google Chrome, платформу цифрового распространения Google Play и соответствующую платформу разработки служб Google Play. Около 70 процентов смартфонов Android работают под управлением экосистемы Google; конкурирующие экосистемы и форки Android включают Fire OS (разработанную Amazon) или LineageOS. Однако название и логотип «Android» являются товарными знаками Google, которые налагают стандарты, ограничивающие использование «несертифицированных» устройств за пределами их экосистемы для использования брендов Android.

Исходный код использовался для разработки вариантов Android для ряда другой электроники, такой как игровые консоли, цифровые камеры, портативные медиаплееры, ПК и другие, каждая из которых имеет специализированный пользовательский интерфейс. Некоторые широко известные производные включают Android TV для телевизоров и Wear OS для носимых устройств, разработанные Google. Программные пакеты на Android, использующие формат APK, обычно распространяются через магазины проприетарных приложений, такие как Google Play Store, Samsung Galaxy Store и Huawei AppGallery, или платформы с открытым исходным кодом, такие как Aptoide или F-Droid.

Android является самой продаваемой ОС в мире для смартфонов с 2011 года и для планшетов с 2013 года. По состоянию на май 2017 года у нее более двух миллиардов активных пользователей в месяц, это самая большая установленная база среди всех операционных систем, а по состоянию на август 2020 года — Google В Play Маркете более 3 миллионов приложений. Текущая стабильная версия — Android 11, выпущенная 8 сентября 2020 года.

Содержание

Грузим

Первый логотип Android

11 июля 2005 года корпорация Google купила компанию Android, Inc. за 130 миллионов долларов.

5 ноября 2007 года компания официально объявила о создании Open Handset Alliance (OHA) и анонсировала открытую мобильную платформу Android, а 12 ноября 2007 года альянс представил первую версию пакета для разработчиков Android «Early Look» SDK(известную также как Android SDK m3-rc20a) и эмулятор Android.

Кодовое имя каждой версии операционной системы Android ранее представляло собой название какого-либо десерта (это справедливо для версий с 1.5 по 9). Первые буквы наименований в порядке версий соответствуют буквам латинского алфавита: 1.5 Cupcake («кекс»), 1.6 Donut («пончик»), 2.0/2.1 Eclair («эклер»), 2.2 Froyo (обозначение десерта «замороженный йогурт» — от англ. frozen yogurt), 2.3 Gingerbread («имбирный пряник»), 3.0 Honeycomb («пчелиные соты»), 4.0 Ice Cream Sandwich («мороженое в вафлях», в виде брикета), 4.1/4.2/4.3 Jelly Bean («желейные бобы» — вид конфет), 4.4 KitKat (в честь одноимённого бренда шоколадных батончиков), 5.0/5.1 Lollipop («леденец на палочке»), 6.0 Marshmallow («маршмэллоу»), 7.0 Nougat («нуга»), 8.0 Oreo (печенье «Oreo»), 9.0 Pie («пирог»). Традиция наименования версий Android в честь сладостей прекратилась с выходом Android 10.

23 сентября 2008 года официально вышла версия 1.0 (до этого были неофициальные 0.5, 0.6 и 0.9 версии в виде эмулятора операционной системы), а также первый полноценный пакет разработчика SDK 1.0, Release 1 и к октябрю 2008 версия 1.0 уже дебютировала на настоящем аппарате T-Mobile G1 (также известном как HTC Dream). С момента выхода первой версии платформы произошло несколько обновлений системы. Эти обновления, как правило, касаются исправления обнаруженных ошибок и добавления новой функциональности в систему.

В 2009 году было представлено целых четыре обновления платформы. Так, в феврале вышла версия 1.1, но с исправлением различных ошибок. В апреле и сентябре вышли ещё два обновления — 1.5 «Cupcake» («кекс») и 1.6 «Donut» («пончик») соответственно. Обновление «Cupcake» привнесло существенные изменения: виртуальная клавиатура, воспроизведение и запись видео, браузер и другие. В «Donut» впервые появились поддержка различных разрешений и плотности экрана и сетей CDMA. В октябре того же года вышла версия операционной системы Android 2.0 «Eclair» («эклер») с поддержкой нескольких аккаунтов Google, поддержкой браузером языка HTML5 и других нововведений, а также после небольшого обновления в пределах версии «Eclair» (2) появились «живые обои» и был видоизменён экран блокировки.

В середине 2010 года Google представила Android версии 2.2 под наименованием «Froyo» («замороженный йогурт»), а в конце 2010 года — Android 2.3 «Gingerbread» («имбирный пряник»). После обновления «Froyo» стало возможно использовать смартфон в качестве точки доступа, использовать традиционную блокировку смартфона цифровым или буквенно-цифровым паролем и другие изменения, а обновление «Gingerbread» привнесло более полный контроль над функцией копирования и вставки, улучшение управления питанием и контроля над приложениями, поддержку нескольких камер на устройстве и т. д.

22 февраля 2011 года была официально представлена ориентированная на интернет-планшеты платформа Android 3.0 «Honeycomb» («пчелиные соты»). Исходный код этой версии так и не был открыт компанией Google в связи с опасениями портирования её на смартфоны, для которых она не была предназначена.

Android 4.0 «Ice Cream Sandwich» («сэндвич с мороженым»), вышедшая 19 октября 2011 года, — первая универсальная платформа, которая предназначена как для планшетов, так и для смартфонов. Также обновление принесло новый интерфейс «Holo», который использовался до Android 4.4.4 KitKat .

В июне 2012 вышло обновление под названием «Jelly Bean» (желейная конфета) с порядковым номером 4.1, который сменился на 4.2 вследствие небольшого обновления в конце октября того же года и на 4.3 после обновления в июле 2013.

31 октября 2013 года Google представила следующую версию операционной системы Android 4.4, которая получила название шоколадного батончика «KitKat» по соглашению с компанией производителем Nestlé. Впервые KitKat появился на Nexus 5; эта версия Android оптимизирована для работы на более широком наборе устройств, имеющих 512 МБ ОЗУ и экран с разрешением 800×480 пикс. в качестве рекомендуемого минимума. Также, в качестве тестовой опции, в настройках разработчика стала доступна виртуальная машина ART.

25 июня 2014 Google представили Android L, доступный для разработчиков, пользователей смартфонов Nexus, а также некоторых других смартфонов.

15 октября 2014 года была официально анонсирована Android 5.0 Lollipop (леденец). Главные обновления системы — новый дизайн Material Design и полный переход к виртуальной машине ART. Также, если на Android-устройстве установлен пароль или графический ключ и если поблизости находятся часы хозяина устройства с Android Wear, то устройство автоматически разблокируется.

9 декабря 2014 Google заменила официальную среду разработки, основанную на Eclipse (adt-bundle), на Android Studio.

В 2015 году была анонсирована операционная система для носимых устройств Android Wear (позже Wear OS). Также на Google IO были представлены версии Android Auto (для автомобилей) и Android TV (для телевизоров), таким образом Android перестал быть операционной системой только для мобильных устройств.

29 мая 2015 Google представила Android M. По словам Google, главная цель новой операционной системы — улучшить пользовательский опыт общения со смартфоном, сделать взаимодействие интуитивнее и проще. 17 августа 2015 официально стало известно, что эта версия получила название Android 6.0 Marshmallow(зефир).

19 мая 2016 года на конференции разработчиков Google I/O была представлена Android N, а 1 июля Google официально объявила название этой версии Android — Android 7.0 Nougat. Рассылка финальной версии операционной системы стартовала 22 августа 2016 года. Поддерживаемые устройства: Huawei Nexus 6P, LG Nexus 5X, Motorola Nexus 6, HTC Nexus 9, ASUS Nexus Player, Google Pixel C и General Mobile 4G.

В марте 2017 года был представлен Android O для разработчиков. Пользовательская версия была выпущена 21 августа 2017 года как 8.0.0 Oreo. 5 декабря 2017 года была выпущена стабильная сборка Android Oreo 8.1.

7 марта 2018 года Google выпустила Android P DP1, а первая бета-версия вышла 8 мая 2018 года, но не только для Pixel, также бету получили Sony Xperia XZ2, Nokia 7 Plus, Xiaomi Mi MIX 2s, Vivo X21, Oppo R15 Pro, Essential Phone, OnePlus 6. Рассылка релизной версии Android 9 Pie началась 6 августа 2018 года.

13 марта 2019 года Google начала открытое бета-тестирование ОС Android Q Beta 1, которая уже доступна для смартфонов Pixel всех поколений. Всего компания собирается выпустить 6 бета-версий ОС. 3 апреля 2019 года вышла Android Q Beta 2, которая появилась в виде GSI-образов, кроме образов для смартфонов Pixel. С их помощью разработчики любого устройства, поддерживающего Project Treble, смогут поставить данную версию ОС для ознакомления и тестирования своих программ. Также Google начала тестирование жестов, похожих на жесты с iPhone X, ответы в мессенджерах в всплывающих окнах, не заходя в само приложение, управление воспроизведением мультимедиа в шторке и новое управление громкостью.

3 сентября 2019 года Google выпустила стабильную версию Android 10 для смартфонов семейства Pixel.

19 февраля 2020 года Google выпустила developer-preview-версию Android 11 для смартфонов семейства Pixel (за исключением смартфонов Pixel 1-го поколения).

Грузим
Разработка

Android разрабатывается Google до тех пор, пока не будут готовы к выпуску последние изменения и обновления, после чего исходный код становится доступным для Android Open Source Project (AOSP), инициативы с открытым исходным кодом, возглавляемой Google. Код AOSP можно найти без изменений на некоторых устройствах, в основном на устройствах бывшей серии Nexus и текущей серии Android One.

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

Грузим

Применение ядра Linux

Ядро Android основано на ветвях долгосрочной поддержки (LTS) ядра Linux. С 2020 года Android использует версии ядра Linux 4.4, 4.9 или 4.14. Фактическое ядро ​​зависит от конкретного устройства.

Вариант ядра Linux для Android имеет дальнейшие архитектурные изменения, которые реализованы Google за пределами типичного цикла разработки ядра Linux, такие как включение таких компонентов, как деревья устройств, ashmem, ION и различная обработка нехватки памяти (OOM). Некоторые функции, которые Google внесла обратно в ядро ​​Linux, в частности, функция управления питанием, называемая «wakelocks», изначально были отклонены разработчиками основного ядра отчасти потому, что они считали, что Google не проявляет никакого намерения поддерживать свой собственный код. В апреле 2010 года Google объявил, что нанимает двух сотрудников для работы с сообществом ядра Linux [177], но Грег Кроа-Хартман, нынешний сопровождающий ядра Linux в стабильной ветке, сказал в декабре 2010 года, что он обеспокоен тем, что Google не больше не пытается включить изменения своего кода в основной Linux. Инженер Google Патрик Брэди однажды заявил на конференции разработчиков компании, что «Android — это не Linux», а Computerworld добавил: «Позвольте мне сделать это проще для вас, без Linux нет Android». Ars Technica пишет, что «хотя Android построен на основе ядра Linux, эта платформа имеет очень мало общего с обычным стеком Linux для настольных ПК».

В августе 2011 года Линус Торвальдс сказал, что «в конечном итоге Android и Linux вернутся к общему ядру, но, вероятно, этого не произойдет в течение четырех-пяти лет». В декабре 2011 года Грег Кроа-Хартман объявил о запуске Android Mainlining Project, целью которого является возвращение некоторых драйверов, исправлений и функций Android в ядро ​​Linux, начиная с версии Linux 3.3. После многих предыдущих попыток слияния Linux включила в ядро ​​3.5 функции автоматического перехода в спящий режим и wakelocks. Интерфейсы такие же, но реализация Linux в восходящем направлении позволяет использовать два разных режима приостановки: в память (традиционная приостановка, которую использует Android) и на диск (переход в спящий режим, как он известен на рабочем столе). Google поддерживает общедоступный репозиторий кода, в котором содержатся их экспериментальные работы по восстановлению Android на последних стабильных версиях Linux.

Флэш-память на устройствах Android разделена на несколько разделов, например /system для самой операционной системы и /data для пользовательских данных и установок приложений. [185] В отличие от настольных дистрибутивов Linux, владельцам устройств Android не предоставляется root-доступ к операционной системе, а такие важные разделы, как /system, доступны только для чтения. Однако root-доступ можно получить, используя недостатки безопасности в Android, которые часто используются сообществом разработчиков ПО с открытым исходным кодом для расширения возможностей своих устройств, а также злоумышленниками для установки вирусов и вредоносных программ.

Android — это дистрибутив Linux, согласно Linux Foundation, руководителю открытого кода Google Крису ДиБоне и нескольким журналистам. Другие, например, инженер Google Патрик Брэди, говорят, что Android — это не Linux в традиционном смысле Unix-подобного дистрибутива Linux; Android не включает библиотеку GNU C (она использует Bionic в качестве альтернативной библиотеки C) и некоторые другие компоненты, обычно присутствующие в дистрибутивах Linux.

Грузим

Помимо ядра Linux есть промежуточное программное обеспечение, библиотеки и API, написанные на C, и прикладное программное обеспечение, работающее на платформе приложений, которая включает в себя Java-совместимые библиотеки. Разработка ядра Linux продолжается независимо от других проектов исходного кода Android.

Android использует Android Runtime (ART) в качестве среды выполнения (представленной в версии 4.4), которая использует предварительную компиляцию (AOT) для полной компиляции байт-кода приложения в машинный код при установке приложения. В Android 4.4 ART была экспериментальной функцией и не была включена по умолчанию; он стал единственным вариантом выполнения в следующей основной версии Android, 5.0. В версиях, которые больше не поддерживаются, до версии 5.0, когда ART вступила во владение, Android ранее использовала Dalvik как виртуальную машину процесса с JIT-компиляцией на основе трассировки для запуска Dalvik «dex-code» (Dalvik Executable), который обычно переводится из байт-кода Java. Следуя принципу JIT на основе трассировки, помимо интерпретации большей части кода приложения, Dalvik выполняет компиляцию и собственное выполнение выбранных часто выполняемых сегментов кода («трассировки») каждый раз при запуске приложения. Для своей библиотеки Java платформа Android использует подмножество проекта Apache Harmony, работа над которым сейчас прекращена. В декабре 2015 года Google объявил, что в следующей версии Android будет реализована реализация Java на основе проекта OpenJDK.

Стандартная библиотека C Android, Bionic, была разработана Google специально для Android как производная от кода стандартной библиотеки C. Сам Bionic был разработан с несколькими основными функциями, характерными для ядра Linux. Основными преимуществами использования Bionic вместо библиотеки GNU C (glibc) или uClibc являются меньшая занимаемая площадь во время выполнения и оптимизация для низкочастотных процессоров. В то же время Bionic лицензируется в соответствии с условиями лицензии BSD, которую Google считает более подходящей для общей модели лицензирования Android.

Стремясь к другой модели лицензирования, к концу 2012 года Google переключил стек Bluetooth в Android с BlueZ под лицензией GPL на BlueDroid под лицензией Apache.

Android по умолчанию не имеет собственной системы X Window и не поддерживает полный набор стандартных библиотек GNU. Это затрудняло перенос существующих приложений или библиотек Linux на Android до тех пор, пока версия r5 Android Native Development Kit не обеспечила поддержку приложений, полностью написанных на C или C++. Библиотеки, написанные на C, также могут использоваться в приложениях путем внедрения небольшой прокладки и использования JNI.

В текущих версиях Android «Toybox», набор утилит командной строки (в основном для использования приложениями, поскольку Android не предоставляет интерфейс командной строки по умолчанию), используется (начиная с выпуска Marshmallow), заменяя аналогичный Коллекция «Toolbox» из предыдущих версий Android.

У Android есть еще одна операционная система, Trusty OS, в составе «Trusty» «программных компонентов, поддерживающих Trusted Execution Environment (TEE) на мобильных устройствах». «Trusty и Trusty API могут быть изменены. Приложения для Trusty OS могут быть написаны на C/C++ (поддержка C ++ ограничена), и у них есть доступ к небольшой библиотеке C. All Trusty приложения являются однопоточными; многопоточность в пользовательском пространстве Trusty в настоящее время не поддерживается. Разработка сторонних приложений не поддерживается в «текущей версии, а программное обеспечение, работающее на ОС и процессоре для нее, запустите» инфраструктуру DRM для защиты контент. Существует множество других применений TEE, таких как мобильные платежи, безопасный банкинг, шифрование всего диска, многофакторная аутентификация, защита от сброса устройства, постоянное хранилище с защитой от воспроизведения, беспроводное отображение («трансляция») защищенный контент, безопасная обработка PIN-кода и отпечатков пальцев и даже обнаружение вредоносных программ.

Особенности

Пользовательский интерфейс Android по умолчанию в основном основан на прямом манипулировании с использованием сенсорного ввода, который примерно соответствует реальным действиям, таким как пролистывание, касание, сжатие и обратное сжатие для управления объектами на экране вместе с виртуальной клавиатурой. Игровые контроллеры и полноразмерные физические клавиатуры поддерживаются через Bluetooth или USB. Реакция на ввод пользователя должна быть немедленной и обеспечивает гибкий сенсорный интерфейс, часто использующий возможности устройства вибрации для обеспечения тактильной обратной связи с пользователем. Внутреннее оборудование, такое как акселерометры, гироскопы и датчики приближения, используется некоторыми приложениями для реагирования на дополнительные действия пользователя, например, для изменения экрана с книжной на альбомную в зависимости от ориентации устройства или позволяя пользователю управлять транспортным средством в гоночной игре, вращая устройство, имитируя управление рулевым колесом.

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

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

На экране «Все приложения» перечислены все установленные приложения, при этом пользователи могут перетаскивать приложение из списка на главный экран. Экран «Недавние» позволяет пользователям переключаться между недавно использованными приложениями.

Грузим

Домашний экран Android 11

Многие, почти все устройства Android поставляются с предустановленными приложениями Google, включая Gmail, Google Maps, Google Chrome, YouTube, Google Play Music, Google Play Movies & TV и многие другие.

Приложения, которые расширяют функциональные возможности устройств (и должны быть 64-битными), пишутся с использованием комплекта разработки программного обеспечения Android (SDK) и, часто, языка программирования Kotlin, который заменил Java. в качестве предпочтительного языка Google для разработки приложений для Android в мае 2019 г. и первоначально был объявлен в мае 2017 г. Java по-прежнему поддерживается (изначально это единственный вариант для программ пользовательского пространства и часто смешивается с Kotlin), как и C++. Java и/или другие языки JVM, такие как Kotlin, можно комбинировать с C/C++, вместе с выбором нестандартных сред выполнения, которые обеспечивают лучшую поддержку C++. Также поддерживается язык программирования Go, хотя и с ограниченным набором интерфейсов прикладного программирования (API).

SDK включает в себя полный набор инструментов разработки, включая отладчик, программные библиотеки, эмулятор телефона на основе QEMU, документацию, примеры кода и учебные пособия. Первоначально интегрированная среда разработки (IDE), поддерживаемая Google, была Eclipse с использованием подключаемого модуля Android Development Tools (ADT); в декабре 2014 года Google выпустила Android Studio, основанную на IntelliJ IDEA, в качестве основной IDE для разработки приложений для Android. Доступны и другие инструменты разработки, включая собственный комплект разработки (NDK) для приложений или расширений на C или C++, Google App Inventor, визуальную среду для начинающих программистов и различные кросс-платформенные платформы мобильных веб-приложений. В январе 2014 года Google представила платформу на основе Apache Cordova для переноса веб-приложений Chrome HTML 5 на Android, заключенную в оболочку собственного приложения. Кроме того, в 2014 году Google приобрела Firebase, которая предоставляет полезные инструменты для разработчиков приложений и веб-приложений.

Android имеет растущий выбор сторонних приложений, которые пользователи могут получить, загрузив и установив файл APK (пакет приложения Android) приложения или загрузив их с помощью программы магазина приложений, которая позволяет пользователям устанавливать, обновлять и удалять приложения со своих устройств. Google Play Store — это основной магазин приложений, установленных на устройствах Android, которые соответствуют требованиям совместимости Google и лицензируют программное обеспечение Google Mobile Services. Магазин Google Play позволяет пользователям просматривать, загружать и обновлять приложения, опубликованные Google и сторонними разработчиками; по состоянию на август 2020 года в Play Store для Android доступно более трех миллионов приложений. По состоянию на июль 2013 года было установлено 50 миллиардов приложений. Некоторые операторы связи предлагают прямой биллинг оператора для покупок приложений в Google Play, когда стоимость приложения добавляется к ежемесячному счету пользователя. По состоянию на май 2017 года у Gmail, Android, Chrome, Google Play и Карт более одного миллиарда активных пользователей в месяц.

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

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

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

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

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

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

Стек технологий Android

It’s all about apps

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

Основная единица в Unix-подобных системах — процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения — это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы — другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start ), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).

Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части — на уровне Unix — оперируют понятием процесса, на более высоком уровне — уровне Android Framework — основной единицей является приложение. Приложение — не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.

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

Для реализации такой системы нужно, чтобы приложения имели возможность общатся друг с другом и с системными сервисами — другими словами, нужен очень продвинутый и быстрый механизм 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, о нескольких его предшественниках и о базовых механизмах обеспечения безопасности.

Операционная система Android

Chistyakov V

Android — это операционная система с открытым исходным кодом, созданная для мобильных устройств на основе модифицированного ядра Linux. Эта ОС разработана консорциумом Open Handset Alliance, состоящим из крупных технологических компаний при организующей роли Google. Исходный код ОС представлен как часть проекта Android Open Source Project (AOSP) с лицензией Apache. Выпущенный на рынок в 2007 году Android вскоре стал самой продаваемой операционной системой в истории, благодаря своей открытой модели разработки и удобному интерфейсу. Последняя версия Android 11 вышла в 2020 году.

История развития

Проект Android появился в 2003 году с целью разработки интеллектуальных мобильных устройств. Начинался он с разработки ОС для цифровых фотокамер, но вскоре акцент сместился на мобильные телефоны из-за их большой распространенности на рынке. В 2005 году проект приобрел Google и в качестве основы для этой ОС было выбрано ядро Linux за счет его гибкости и возможности обновления.

С целью разработки платформы с открытым исходным кодом для мобильных устройств в 2007 году Google сформировала Open Handset Alliance с несколькими производителями оборудования и операторами беспроводной связи. В то время каждый производитель выпускал мобильные телефоны на базе собственной платформы, с ограниченными возможностями для сторонних приложений. Альянс заявил, что открытая платформа обеспечит тесное сотрудничество между производителями и разработчиками, чтобы ускорить производство недорогих инновационных продуктов и приложений.

Платформа Android была представлена в 2007 году и вышла на рынок на следующий год. Поначалу ей мешал ограниченный набор функций и небольшая база пользователей по сравнению с конкурентами Symbian и Windows. Однако возможность обновления стала самым большим преимуществом этой ОС, поскольку каждое обновление давало новые функции и улучшенную производительность. Из-за «сладости, которую они приносят в нашу жизнь», первые версии были названы в честь десертов, в алфавитном порядке, например Cupcake, Jellybean и KitKat. Однако вскоре у Google закончились десерты, и с 2019 года новые версии ОС получают номера, начинающиеся с Android 10. Лицензия с открытым исходным кодом также помогла увеличить популярность этой ОС среди производителей мобильных устройств, поскольку они могут теперь модифицировать ОС под свои требования, не влияя при этом на разработку приложений.

Но самая главная особенность в том, что Android — это больше, чем просто операционная система. Он во многом уравнял мобильные устройства с персональными компьютерами, позволив разработчикам писать приложения независимо от аппаратной платформы устройства. Это привело к созданию глобальной платформы для приложений и укрепило позиции Android, как передовой мобильной платформы, и в 2011 году он стал самой продаваемой операционной системой для смартфонов и для планшетов в 2013 году. Сегодня на Android работает множество электронных устройств, включая смарт-камеры, часы, медиаплееры и многое другое.

Архитектура

Первоначально Android разрабатывался для архитектуры ARM, а затем был расширен для поддержки архитектур x86 и x86–64. Однако в целом Android не заботится об аппаратном обеспечении устройства из-за разнообразия и множества типов среди компонентов в мобильных устройствах.

Основой ОС Android является модифицированная версия ядра Linux LTS, которая непосредственно взаимодействует с оборудованием. Драйверы, необходимые для работы устройства, реализуются производителями оборудования и добавляются в ядро. Это позволяет производителям оборудования разрабатывать драйверы для хорошо известного ядра, а разработчикам ОС игнорировать разнообразие оборудования. Android 11 поддерживает версии ядра 4.14, 4.19 и 5.4.

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

Android Runtime (ART) — это виртуальная машина, которая выполняет код приложения, содержащийся в файлах Dalvik Executable (DEX). Она управляет компиляцией кода, отладкой и очисткой памяти. Каждое приложение работает со своим собственным экземпляром ART, то есть в своей собственной виртуальной машине, чтобы обеспечить изоляцию кода. ART заменил Dalvik в качестве виртуальной машины Java для Android в 2013 году, поскольку его компиляция Ahead-of-Time обеспечила лучшую производительность по сравнению с компиляцией Just-in-Time у последней.

Собственные библиотеки C/C ++ являются важной частью операционной системы, поскольку большинство основных компонентов Android написаны на собственном коде. Инфраструктура Java API — это шлюз в ОС для всех пользовательских приложений. Он предоставляет множество сервисов для приложений в виде вызовов Java API, включая менеджеры действий, ресурсов и уведомлений, поставщиков контента и систему просмотра. Именно поэтому приложения для Android в основном разрабатываются на Java, хотя собственные библиотеки обеспечивают некоторую поддержку C/C++. Совсем недавно также поддерживался и Kotlin, он даже предпочитался Google для разработки приложений Android. Код компилируется Android Software Development Kit (SDK) и архивируется в виде пакета Android (APK).

Android против Linux

Хотя некоторые считают Android дистрибутивом Linux, он имеет мало общего с обычной ОС Linux.

В традиционном стеке Linux ядро выполняет большую часть системных функций, включая управление памятью и файлами, аппаратное взаимодействие и планирование процессов. Системные функции предоставляются приложениям через библиотеки и вызовы API на языке Си. Именно поэтому GNU C является более важной библиотекой в Linux. Пользователи взаимодействуют с системой через оболочки, которые транслируют пользовательские команды в системные вызовы.

С другой стороны, Android можно рассматривать как пользовательское приложение, работающее в Linux. ОС использует ядро для взаимодействия с оборудованием и управления системой, а затем предлагает свои функции другим приложениям через интерфейс API. Этот интерфейс написан полностью на Java, и даже функции библиотек C/C ++ предложены в оболочках Java. В Android нет оболочки, хотя некоторые утилиты командной строки поддерживаются через приложение Toybox.

Кроме того, Android оптимизирован для мобильных устройств, которые обычно обладают малой вычислительной мощностью, имеют небольшой объем памяти и работают от батарей. По умолчанию, в качестве библиотеки C, вместо GNU, он использует Bionic из-за пониженных требований к памяти и процессору. При нехватке памяти, Android может уничтожить наименее используемые процессы и сбросить блоки разделяемой памяти. Кроме того, здесь реализуется уникальная система управления питанием, в которой устройство остается в спящем режиме, потребляя минимальную мощность до тех пор, пока процесс не запросит ресурс.

Ядро Android

Перед установкой на устройство само ядро Linux подвергается модификации несколькими участниками проекта. Во-первых, разработчики Android оптимизируют ядро LTS для мобильных устройств, вносят коррективы в функции Android и оставляют код как общее ядро AOSP. Разработчики AOSP реализуют большинство изменений в виде драйверов устройств, чтобы гарантировать внесение минимальных изменений в основной код ядра. Это позволяет с минимальными изменениями объединять обновления базового ядра в ACK. Поставщики оборудования добавляют драйверы и уровни абстракции для создания ядра поставщика. Затем, производители устройств обновляют ядро в соответствии со своими требованиями, реализуя новые драйверы или даже улучшая систему. Это ядро, в конечном счете, устанавливается на выпускаемые производителем устройства.

Разработка приложения

Основной принцип разработки в Android заключается в том, чтобы абстрагироваться от вариативности оборудования и предоставить унифицированный интерфейс для приложений. Это достигается запуском всех приложений на виртуальных машинах Java, подобных Dalvik или ART. Еще более способствует этой абстракции и упрощает разработку приложений комплект, состоящий из инфраструктуры Java API и SDK Android. Интерфейс API выполняет всю сложную работу, обеспечивая приложениям доступ к системным ресурсам лишь через вызов функции, в то время как SDK предоставляет визуальные инструменты для создания макетов приложений и управления вводом данных пользователя.

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

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

Заключение

При первых анонсах Open Handset Alliance их планы по взаимодействию при разработке открытой и многоцелевой платформы представлялись не более чем громким заявлением. Однако через десять лет платформа Android произвела революцию, и не только в мобильной индустрии. Фактически, она породила совершенно новые отрасли промышленности и коренным образом изменила наш образ жизни, работы и общения.

Что такое Андроид и зачем он нужен

Первые смартфоны (коммуникаторы) появились в мире почти 20 лет назад. Они позволяли решать самые простые задачи, связанные с открытием и редактированием документов, умели отправлять факсы и электронную почту. Тем не менее на рынке властвовали обычные телефоны и небольшие карманные компьютеры Palm. В конце нулевых на рынке стали появляться устройства, работающие на Android. Что такое Андроид и какими возможностями наделила эта операционная система современные мобильные устройства?

Особенности простого телефона

Долгое время мобильные телефоны были средством для совершения голосовых вызовов и инструментом для отправки/приема SMS. С развитием технологий на рынке стали появляться телефоны с поддержкой J2ME – это позволило расширять функциональность с помощью дополнительных приложений. Но до полноценного карманного компьютера им было очень и очень далеко.

Обычные мобильные телефоны (не смартфоны) умеют звонить и совершать звонки, обладают функциями по работе с SMS и MMS, могут выходить в интернет и отправлять электронную почту. Для выхода в интернет здесь есть простые браузеры. Все эти возможности вшиты в память телефонов, поэтому заменить неудобную «звонилку» тут не получится. Не нравится встроенный аудиоплеер или не хватает кодеков для воспроизведения видео? Придется скрипеть зубами и терпеть.

Некоторую часть рынка более умных устройств долгое время занимали смартфоны/коммуникаторы на базе Windows Mobile и Symbian. Здесь уже была многозадачность, была возможность находить и устанавливать различные программы. Пользователи радовались приличному функционалу, но все это было немного не то – не было той свободы действий, которая предоставлена современным пользователям смартфонов на Android.

Что представляет собой Android

Массовое распространение устройств на Android произошло в конце нулевых, когда на рынке властвовали Windows Mobile (всевозможных версий, часто несовместимых между собой) и Symbian. Параллельно с ними развивалась продукция Apple – ее смартфоны были иконой функциональности. Появление Android стало настоящим фурором. Эта операционная система подмяла под себя рынок «умных» устройств, став явным лидером.

По состоянию на середину 2018 года на ее основе работало более 85,9% мобильных устройств – Apple со своей iOS осталась далеко позади. Андроид – это многозадачная операционная система для мобильных устройств, построенная на основе Linux. Отсюда высокая производительность и открытый код. Первая версия появилась в конце 2008 года, за ней последовали многочисленные обновления. Последней версией считается Android 9.0 Pie, появившаяся во второй половине 2018 года. На очереди – Android 10.0 Q, дата релиза неизвестна.

Каждая новая разработка – это новые возможности, повышенная экономичность и повышенная производительность. Андроид – это операционная система, позволившая создать полноценные карманные компьютеры, которыми являются все современные смартфоны и планшеты. Устройства на Android OS умеют:

  • Звонить и принимать вызовы;
  • Работать с электронной почтой;
  • Работать с любыми беспроводными модулями (3G, 4G, GPS/ГЛОНАСС, Wi-Fi, NFC и т. д.);
  • Взаимодействовать с пользователями посредством сенсорных экранов, клавиатур, мышек, тачпадов и геймпадов;
  • Выходить в интернет через беспроводные сети;
  • Осуществлять видеовызовы;
  • Делать качественные фотографии и снимать видеоролики, работая с несколькими матрицами сразу;
  • Осуществлять верификацию пользователей с помощью многочисленных средств защиты, в том числе с использованием сканера отпечатка пальца;
  • Работать с принтерами, внешними камерами и прочими устройствами;
  • Взаимодействовать с умными устройствами.

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

Важная функция смартфонов на Android – возможность заменить собой банковскую карту. Для этого нужно привязать карточку к Google Pay или Samsung Pay. Для оплаты в магазине достаточно поднести смартфон к терминалу, дождаться сигнала успешного проведения операции и получить у кассира чек. Данным функционалом обладают устройства с модулем NFC.

Возможности Андроид

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

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

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

Не нравится стандартная «звонилка»? Не беда – скачайте другое приложение, замените ярлыки на рабочем столе и пользуйтесь новым приложением. Не нравится встроенный плеер? Достаточно скачать другой из Google Play. Также здесь можно скачать:

  • Клиенты популярных социальных сетей;
  • Мессенджеры для обмена мгновенными сообщениями;
  • Банковские клиенты;
  • Почтовые программы;
  • Кошельки электронных платёжных систем;
  • Новостные приложения;
  • Клиенты онлайн-изданий;
  • Офлайн- и онлайн-игры;
  • Кулинарные приложения и многое другое.

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

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

В последних версиях Android реализовано разделение экрана на две части для одновременной работы сразу с двумя приложениями.

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *