Что такое android архитектура ос. Операционная система Anroid. Иерархия памяти устройства на Android

Android is an open source, Linux-based software stack created for a wide array of devices and form factors. The following diagram shows the major components of the Android platform.

Figure 1.

The Linux Kernel

The foundation of the Android platform is the Linux kernel. For example, relies on the Linux kernel for underlying functionalities such as threading and low-level memory management.

Using a Linux kernel allows Android to take advantage of and allows device manufacturers to develop hardware drivers for a well-known kernel.

Hardware Abstraction Layer (HAL)

Android also includes a set of core runtime libraries that provide most of the functionality of the Java programming language, including some Java 8 language features , that the Java API framework uses.

Native C/C++ Libraries

Many core Android system components and services, such as ART and HAL, are built from native code that require native libraries written in C and C++. The Android platform provides Java framework APIs to expose the functionality of some of these native libraries to apps. For example, you can access OpenGL ES through the Android framework’s Java OpenGL API to add support for drawing and manipulating 2D and 3D graphics in your app.

If you are developing an app that requires C or C++ code, you can use the Android NDK to access some of these native platform libraries directly from your native code.

Java API Framework

The entire feature-set of the Android OS is available to you through APIs written in the Java language. These APIs form the building blocks you need to create Android apps by simplifying the reuse of core, modular system components and services, which include the following:

  • A rich and extensible View System you can use to build an app’s UI, including lists, grids, text boxes, buttons, and even an embeddable web browser
  • A , providing access to non-code resources such as localized strings, graphics, and layout files
  • A Notification Manager that enables all apps to display custom alerts in the status bar
  • An Activity Manager that manages the lifecycle of apps and provides a common navigation back stack
  • Content Providers that enable apps to access data from other apps, such as the Contacts app, or to share their own data

Developers have full access to the same framework APIs that Android system apps use.

System Apps

Android comes with a set of core apps for email, SMS messaging, calendars, internet browsing, contacts, and more. Apps included with the platform have no special status among the apps the user chooses to install. So a third-party app can become the user"s default web browser, SMS messenger, or even the default keyboard (some exceptions apply, such as the system"s Settings app).

The system apps function both as apps for users and to provide key capabilities that developers can access from their own app. For example, if your app would like to deliver an SMS message, you don"t need to build that functionality yourself-you can instead invoke whichever SMS app is already installed to deliver a message to the recipient you specify.

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

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

1. Yaffs и Yaffs2

Создателем файловой системы Yaffs (Yet Another Flash File System) является Чарльз Мэннинг, родом из Новой Зеландии. Данная ФС предназначается для организации работы флеш-накопителей и оперативной памяти. Основным ее преимуществом является повышение сроков эксплуатации модулей памяти, так как система автоматически пропускает ячейки, предназначенный для однократной записи. Yaffs2 использовалась для организации работы внутренней памяти гаджетов Android версии 2.2 и 2.3.

2. VFAT

Vfat не является полноценной самостоятельной файловой системой, а представляет собой расширение FAT. Доработанная версия позволяет сохранять файлы с длинными именами, но по всем остальным характеристикам является морально устаревшей. Vfat может использоваться на картах памяти, а операционные системы на базе ОС Андроид полностью их поддерживают. В основном, это файловая система флешки android.

3. F2FS

F2FS (Flash Friendly File System) – файловая система, которая предназначена в первую очередь на работу с флеш-памятью и SSD-накопителями. Разработал ее сотрудник компании Samsung, Ким Чэ Гык, а после публикации исходного кода она была доработана другими инженерами компании. F2FS может использоваться на картах памяти SD/MMC, а также со множеством других типов памяти. Для полноценной кастомизации существует целый набор утилит. Из преимуществ можно отметить хорошую гибкость в настройке, высокие показатели сохранения жизненного цикла блоков памяти, а также хранение данных в виде журнала. Хорошую скорость работы обеспечивает то, что индексы данных сохраняются в оперативную память, а поддержка F2FS включена в ядро Linux, начиная с версии 3.8.

4. Ext2-Ext4

Ext2-Ext4 – основные файловые системы Android. Именно они используются для организации работы внутреннего хранилища на большинстве современных гаджетов, и если первые устройства работали под версиями Ext2, то начиная с версии Android 4, основными стали Ext3, а потом и Ext4. Основное отличие между вариациями заключается в наличие журналирования. То есть, если в процессе записи или чтения данных происходит системный сбой, например, неожиданное отключение питания, не произойдет потери или повреждения данных. Несмотря на то, что в основном ФС формата Ext используется в основном в блочных накопителях, пользователи могут установить данный тип и для карт памяти, но без сторонних утилит получить к ним доступ из операционных систем, помимо Linux, будет невозможно. Файловая система флэшки Android обычно форматируются в FAT (VFAT) или NTFS, а флеш-память - в Ext3 или Ext4.

5. UBIFS

mSATA SSD 16 GB Sandisk - SDSA3DD-016G

UBIFS – файловая система, предназначенная исключительно для памяти по типу NAND (флеш-накопители, применяемые на мобильных устройствах). Ее основное преимущество - это снижение износа носителей данных. Состоит такая ФС из двух слоев - UBI (отвечает за работу и связь с физическим носителем) и UBIFS (сама файловая система). Разработчиком UBIFS является компания Nokia, но встретить подобную файловую систему можно не только на оригинальных устройствах от данного производителя, но и на других гаджетах, например, китайского изготовления.

6. Samsung RFS

Samsung RFS – разработанная корейской компанией Samsung файловая система для устройств на базе ОС Linux, а одной из разновидностей последнего является Android. Предназначается фирменная ФС для флеш-памяти NAND и используется во многих гаджетах собственного производства. Для облегчения работы с файлами используется таблица формата FAT, что позволяет максимально просто произвести запись файлов на флэш-память и их чтение. Специфика RFS учитывает особенности NAND накопителей, что позволяет увеличить длительность их эксплуатации, а также снизить вероятность потери данных при системных сбоях и случайных отключениях питания.

7. SDCardFS

Компания Google долгое время использовала в своих устройствах файловую систему FUSE, но она имела ряд недостатков, среди которых необходимо отметить малое количество памяти, выделяемой под приложения под приложения, а также большое потребление хранилища при кэшировнии данных. На замену FUSE пришла SDCardFS, которая решала эти проблемы, но представляла собой своего рода оболочку, эмулирующую FAT32. Она отправляет данные файловым системам нижнего уровня, что позволяет оптимизировать работу смартфонов, а также исправляет ошибки, связанные с передачей данных на компьютер и обратно. SDCardFS по своей сути не является классической файловой системой, но значительно сказывается на скорости работы смартфонов или планшетов на Android.

Выводы

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

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

Похожие записи:


Реферат

Архитектура платформы Google Android

Введение

Android - это программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного слоя (middleware) и основные пользовательские приложения (e-mail-клиент, календарь, карты, браузер, контакты и др.).

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

Эта платформа является самой популярной на рынке: она установлена на 68% устройств. Число программ в магазине приложений Google Play превышает 600 000 единиц. За всё время работы магазина было выполнено 20 млрд установок приложений. Согласно заявлениям Энди Рубина - руководителя разработки Android в Google - ежедневно в мире активируется 1.3 млн Android-устройств.

Эти данные и побудили меня исследовать вопрос об архитектуре платформы.

Архитектура Android

Рисунок 1. Структура платформы Google Android

Архитектура Google Android состоит из четырех уровней (нумерация обозначает порядок уровней снизу вверх).

)Ядро OS Linux версии 2.6 обеспечивает функционирование системы. Оно отвечает за безопасность, управление памятью, энергосистемой и процессами, а также предоставляет сетевой стек и модель драйверов. Кроме того, оно играет связующую роль между аппаратным обеспечением и остальной частью программного стека.

)Программное обеспечение промежуточного слоя - набор библиотек (Libraries), предназначенный для обеспечения важнейшего функционала для приложений.

Вот некоторые из них:

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

·Media Framework - библиотеки, реализованные на базе PacketVideo OpenCORE. С их помощью система осуществляет запись / воспроизведение аудио- и видео - контента, а также вывод статических изображений. Поддерживаются форматы MPEG4, H.264, MP3, AAC, AMR, JPG и PNG и др.

·SQLite - реляционная СУБД, используемая в Android в качестве основного движка для работы с базами данных, используемыми приложениями для хранения информации.

·3D библиотеки - используются для отрисовки 3D-графики, при возможности используют аппаратное ускорение. Реализуются на основе API OpenGL ES 1.0.

·FreeType - библиотека для работы для растеризации шрифтов и осуществления операций над ними.

·LibWebCore - библиотеки браузерного движка WebKit.

·Libc - стандартная библиотека языка C, настроенная для работы на устройствах на базе Linux.

Все библиотеки написаны на языке C++ и скомпилированы под конкретное аппаратное обеспечение устройства.

На этом же уровне располагается среда выполнения Android Runtime. Она состоит из виртуальной Java-машины Dalvik и библиотек ядра. Dalvik поддерживает одновременную работу нескольких приложений и выполняет файлы в специальном формате.dex, оптимизированном для устройств с малым количеством памяти. Библиотеки ядра написаны на языке Java и поддерживают широкий диапазон функциональных возможностей.

Каждое приложение в Android Runtime запускается в собственном экземпляре виртуальной машины Dalvik. То есть, все работающие процессы изолированы от операционной системы и друг от друга. Особенность структуры Android Runtime позволяет осуществлять работу программ строго в рамках виртуальной машины. Благодаря этому ядро операционной системы защищено от влияния со стороны других компонентов. Код с ошибками или вредоносное ПО не смогут испортить систему или само устройство. Функция защиты, кроме непосредственного выполнения программного кода, является одной из ключевых для этого уровня.

3)Следующий уровень - Application Framework, или каркас приложений. Именно через каркасы приложений разработчики получают доступ к API, предоставляемым компонентами системы, лежащими ниже уровнем. Кроме того, благодаря архитектуре фреймворка, любому приложению предоставляются уже реализованные возможности других приложений, к которым разрешено получать доступ.

В базовый набор сервисов и систем, лежащих в основе каждого приложения и являющихся частями фреймворка, входят:

·Богатый и расширяемый набор представлений (Views ), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.

·Контент-провайдеры (Content Providers ), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.

·Менеджер ресурсов (Resource Manager ), обеспечивающий доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.

·Менеджер оповещений (Notification Manager ), благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.

·Менеджер действий (Activity Manager ), который управляет жизненными циклами приложений, сохраняет данные об истории работы с действиями, а также предоставляет систему навигации по ним.

·Менеджер местоположения (Location Manager ), позволяющий приложениям периодически получать обновленные данные о географическом положении устройства.

Таким образом, приложения в ОС Android могут получать в своё распоряжение вспомогательные инструменты.

Отличия фреймворка от библиотеки

·Фреймворк только выполняет код, написанный для него, библиотеки исполняются сами.

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

4)Уровень Applications. Сюда относятся базовые программы, предустановленные на Android. Это браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. Также на этом уровне располагается стороннее ПО. Система позволяет устанавливать его без ограничений, поэтому все стандартные приложения могут быть заменены аналогами. Приложения для Android пишутся на языке Java.

Заключение

android программа пользовательский операционный

Особенности архитектуры платформы Google Android позволили ей выйти на первое место среди других платформ. Главные из них:

)Регистр-ориентированная виртуальная машина Dalvik для выполнения приложений.

)Инновационные библиотеки, значительно расширяющие функционал устройств.

)«Легковесная» СУБД SQLite для хранения данных.

)Возможность поддержки 3D и 2D графики, и даже комбинирования их в одном приложении.

)Многозадачность и изолированность процессов друг от друга.

)Универсальность архитектуры наряду с высоким качеством.

Список источников

1.Голощапов А.Л. Google Android: системные компоненты и сетевые коммуникации. - СПб.: БХВ-Петербург, 2012. - 384 c.

2.Фелкер Д. Android: разработка приложений для чайников. - М.: Диалектика, 2012. - 336 с.

3.Хашими С., Коматинени С., Маклин Д. Разработка приложений для Android. - СПб.: Питер, 2011. - 736 с.

Введение

История

Распространение Android

Встроенные приложения Android

Архитектура Android

Достоинства и недостатки ОС Android

1 Достоинства

2 Недостатки

Чем Android не является

Заключение

Литература

Введение

Google Android - это не просто операционная система для смартфона, а целая инфраструктура. Android является первой бесплатной операционной системой с открытым исходным кодом. На «зелёном роботе» работают телефоны, планшеты, телевизоры, умные часы, и другие гаджеты, а скоро и автомобили будут управляться с помощью Android. ОС основана на ядре Linux и собственной реализации виртуальной машины Java от Google. Изначально разрабатывалась компанией Android Inc, которую в 2005 году купила Google. Впоследствии Google инициировала создание альянса Open Handset Alliance (OHA), который сейчас занимается поддержкой и дальнейшим развитием платформы. Android позволяет создавать Java-приложения, управляющие устройством через разработанные Google библиотеки. Android Native Development Kit позволяет портировать (но не отлаживать) библиотеки и компоненты приложений, написанные на Си и других языках. ОС Android установлена на 86% смартфонов (2014).

Рисунок 1 - эмблема

1. История

Рисунок 2

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

сентября 2008 года официально вышла первая версия операционной системы, а также первый полноценный пакет разработчика SDK 1.0, Release 1. С момента выхода первой версии платформы произошло несколько обновлений системы. Эти обновления, как правило, касаются исправления обнаруженных ошибок и добавления новой функциональности в систему.

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

В октябре того же года вышла версия операционной системы Android 2.0 «Eclair»с поддержкой нескольких аккаунтов Google, поддержкой браузером языка HTML5 и других нововведений, а также после небольшого обновления в пределах версии «Eclair» (2.1) появились «живые обои» и был видоизменён экран блокировки.

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

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

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

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

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

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

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

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

мая 2015 Googlе представила Android M. По словам Google главная цель новой операционной системы- улучшить пользовательский опыт общения со смартфоном, сделать взаимодействие интуитивное и проще.

17 августа 2015 официально стало известно, что Android Mполучила название Android 6.0 Marshmallow .

anroid программа мобильный

2. Распространение Android

В начале каждого месяца Google традиционно публикует статистику распространения версий Android. Согласно последним данным, за январь 2016 доля Android 6.0Marshmallow увеличилась почти в два раза, но пока под управлением новой операционной системы работает всего 1.2% устройств. Увы, но производители не торопятся обновлять уже выпущенные гаджеты, а в большинстве представленных за последнее время новинок все еще используется Android Lollipop.

Рисунок 3

Таблица 1

ВерсияКодовое названиеAPIРаспространение2.2Froyo80.1%2.3.3 - 2.3.7Gingerbread102.7%4.0.3 - 4.0.4Ice Cream Sandwich152.5%4.1.xJelly Bean168.8%4.2.x1711.7%4.3183.4%4.4KitKat1935.5%5.02117.0%5.1Lollipop2217.1%6.0Marshmallow231.2%Данные на 1 февраля 2016 .

Доля Android 6.0 Marshmallow едва превысила 1% спустя почти четыре месяца после релиза платформы. За это же время до iOS 9 обновились 77% мобильных гаджетов Apple.

% устройств используют ОС iOS 9 (iPhone и iPad)

Рисунок 4

Что самое удивительное, в рейтинге Google по-прежнему лидирует анонсированная в 2013 году Android 4.4 KitKat (35.5%). На втором месте по популярности находится версия Lollipop с долей 34.1%, а третью строчку занимает Jelly Bean (23.9%).

3. Встроенные приложения Android

Устройства с системой Android снабжены набором предустановленных программ, разработанных в рамках проекта Android Open Source Project (AOSP) (Проект открытых исходных кодов для Android).

Перечислим основные из них:

E-mail - клиент;

Приложение для работы с SMS (начиная с Android 5.0 заменено на Hangouts);

Полный набор инструментов для управления личными данными пользователя, включая календарь и адресную книгу;

Браузер на базе WebKit (начиная с Android 4.4 заменено на Google Chrome);

Музыкальный плеер и фотогалерея (начиная с Android 5.0 заменено на Google Play Музыка и Google Фото);

Калькулятор;

«Рабочий стол»;

Будильник

Во многих случаях Android включает также следующее лицензионное ПО от Google:

Магазин Google Play Store для загрузки сторонних программ, разработанных для платформы Android, покупки фильмов, музыки, книг и прессы;

Полноценное приложение Google Maps, включая функцию Street View («Просмотр улиц»), Driving Directions («Показ проезда»), маршрутизированную навигацию, спутниковую карту и информация о пробках;

Программу для работы с почтой Gmail;

Программу для обмена мгновенными сообщениями Google Hangouts;

Программу для работы с файлами Google Диск;

Видеоплеер для работы с сервисом YouTube.

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

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

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

Некоторые производители разработали свои собственные интерфейсы, например, Sense от HTC, Moto Blur от Motorola и Touch Wiz от Samsung.

4. Архитектура Android

Рисунок 5 Структура платформы Google Android

Архитектура Google Android состоит из четырех уровней (нумерация обозначает порядок уровней снизу-вверх).

Уровень - Ядро OS Linux версии 2.6 обеспечивает функционирование системы. Оно отвечает за безопасность, управление памятью, энергосистемой и процессами, а также предоставляет сетевой стек и модель драйверов. Кроме того, оно играет связующую роль между аппаратным обеспечением и остальной частью программного стека.

Уровень - Программное обеспечение промежуточного слоя - набор библиотек (Libraries), предназначенный для обеспечения важнейшего функционала для приложений.

Вот некоторые из них:

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

Media Framework - библиотеки, реализованные на базе PacketVideo OpenCORE. С их помощью система осуществляет запись/воспроизведение аудио- и видео- контента, а также вывод статических изображений. Поддерживаются форматы MPEG4, H.264, MP3, AAC, AMR, JPG и PNG и др.

SQLite - реляционная СУБД, используемая в Android в качестве основного движка для работы с базами данных, используемыми приложениями для хранения информации.

3D библиотеки - используются для отрисовки 3D-графики, при возможности используют аппаратное ускорение. Реализуются на основе API OpenGL ES 1.0, 2.0, 3.0 и 3.1.

FreeType - библиотека для работы для растеризации шрифтов и осуществления операций над ними.

LibWebCore - библиотеки браузерного движка WebKit.

SGL (Skia Graphics Engine) - библиотека для работы с 2D-графикой.

Libc - стандартная библиотека языка C, настроенная для работы на устройствах на базе Linux.

Все библиотеки написаны на языке C++ и скомпилированы под конкретное аппаратное обеспечение устройства.

На этом же уровне располагается среда выполнения Android Runtime. Она состоит из виртуальной Java-машины Dalvik/ART и библиотек ядра. Dalvik/ART поддерживает одновременную работу нескольких приложений и выполняет файлы в специальном формате. dex, оптимизированном для устройств с малым количеством памяти. Библиотеки ядра написаны на языке Java и поддерживают широкий диапазон функциональных возможностей.

Каждое приложение в Android Runtime запускается в собственном экземпляре виртуальной машины Dalvik/ART. То есть, все работающие процессы изолированы от операционной системы и друг от друга. Особенность структуры Android Runtime позволяет осуществлять работу программ строго в рамках виртуальной машины. Благодаря этому ядро операционной системы защищено от влияния со стороны других компонентов. Код с ошибками или вредоносное ПО не смогут испортить систему или само устройство. Функция защиты, кроме непосредственного выполнения программного кода, является одной из ключевых для этого уровня.

Уровень - Application Framework, или каркас приложений. Именно через каркасы приложений разработчики получают доступ к API, предоставляемым компонентами системы, лежащими ниже уровнем. Кроме того, благодаря архитектуре фреймворка, любому приложению предоставляются уже реализованные возможности других приложений, к которым разрешено получать доступ.

В базовый набор сервисов и систем, лежащих в основе каждого приложения и являющихся частями фреймворка, входят:

Богатый и расширяемый набор представлений (Views), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.

Контент-провайдеры (Content Providers), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.

Менеджер ресурсов (Resource Manager), обеспечивающий доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.

Менеджер оповещений (Notification Manager), благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.

Менеджер действий (Activity Manager), который управляет жизненными циклами приложений, сохраняет данные об истории работы с действиями, а также предоставляет систему навигации по ним.

Менеджер местоположения (Location Manager), позволяющий приложениям периодически получать обновленные данные о географическом положении устройства.

Таким образом, приложения в ОС Android могут получать в своё распоряжение вспомогательные инструменты.

Отличия фреймворка от библиотеки

Фреймворк только выполняет код, написанный для него, библиотеки исполняются сами.

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

4 Уровень - Applications. Сюда относятся базовые программы, предустановленные на Android. Это браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. Также на этом уровне располагается стороннее ПО. Система позволяет устанавливать его без ограничений, поэтому все стандартные приложения могут быть заменены аналогами. Приложения для Android пишутся на языке Java .

5. Достоинства и недостатки ОС Android

1 Достоинства

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

В Android-аппаратах, как правило, присутствует microSD-кардридер, делающий возможным быстрый перенос файлов с компьютера на телефон. Кроме того, в Windows Phone 7 невозможна прямая передача каких-либо файлов с телефона и на телефон, кроме как через программы синхронизации (Zune), в то время как телефоны на Android экспортируют файловую систему карты памяти как USB mass storage device (в версиях начиная с 3.0 на усмотрение производителя) или с помощью Media Transfer Protocol (MTP).

В отличие от Windows Phone 7, в Android заявлена полноценная реализация Bluetooth-стека, позволяющая в том числе передачу и приём файлов. Присутствует реализация FTP-сервера, режима точки доступа к сети (службы PAN) и групповой одноранговой сети через Bluetooth (службы GN).

Несмотря на изначальный запрет на установку программ из «непроверенных источников» (например, с карты памяти), это ограничение отключается штатными средствами в настройках аппарата, что позволяет устанавливать программы на телефоны и планшеты без интернет-подключения (например, пользователям, не имеющим Wi-Fi-точки доступа и не желающим тратить деньги на мобильный интернет, который обычно стоит дорого), а также позволяет всем желающим бесплатно писать приложения для Android и тестировать на своём аппарате.доступен для различных аппаратных платформ, таких как ARM, MIPS, x86.

Существуют альтернативные Google Play магазины приложений: Amazon Appstore (англ.), Opera Mobile Store, Yandex.Store, GetUpps!, F-Droid (англ.) и другие.

В версии 4.2 введена поддержка многопользовательского режима.

5.2 Недостатки

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

В версии Android 1.6 разработчики добавили Native Development Kit, который позволяет писать собственные низкоуровневые модули для системы на языках C/С++, опираясь на стандартные Linux-библиотеки. Хотя, например, стандартная библиотека языка Си на платформе Android, известная как Bionic, как раз не является стандартной и полностью совместимой с libc.

Для доступа к Google Play и другим сервисам от Google необходимо использовать проприетарные приложения, которые производитель телефона имеет право устанавливать на телефон только после заключения контракта с Google.

Конкуренты Android выступили с критикой платформы, обвиняя её в чрезмерной фрагментации, создающей препятствия разработчикам. Google опровергла все обвинения, заявив, что никаких подобных проблем нет.

Подвергается критике решение Google не размещать в широком доступе код Android 3.0 Honeycomb, доступный только для участников Open Handset Alliance или по индивидуальному запросу после подписания соглашения. Google мотивирует это неготовностью платформы и мерой предупреждения небрежной её реализации. Ричард Столлман заявлял, что «всё просто и ясно: за исключением ядра Linux, Android 3 представляет собой несвободный софт» и «несмотря на то, что телефоны с Android на сегодняшний день не так плохи, как смартфоны Apple или Windows, нельзя сказать, что они уважают вашу свободу». В настоящий момент Google открыл исходный код для всех версий Android вплоть до 6.0, а также отправил в Linux все изменения, в соответствии с GPL.

По данным Lookout Security Mobile, за 2011 год у пользователей Android-смартфонов было украдено около миллиона долларов США (напр., отправка СМС без ведома владельца телефона). Однако это зачастую возникает у пользователей, которые невнимательно читают списки разрешений .

6. Чем Android не является

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

-Реализацией платформы Java ME. Приложения для Android написаны с использованием языка Java, однако они не используются на виртуальной машине Java ME (Mobile Edition - мобильная версия), соответственно, скомпилированные для Java классы и исполняемые файлы не будут работать на платформе Android.

-Частью инициативы Linux Phone Standards Forum (LiPs) (Форума стандартов мобильногоLinux) или Open Mobile Alliance (OMA) (Альянс открытых мобильных архитектур). Android работает на Linux-ядре с открытым исходным кодом, но при всей схожести целей весь программный стек платформы Android призван решить более перспективные задачи по сравнению с инициативами упомянутых организаций по определению стандартов.

-Стандартным уровнем приложений (например, UiQ или S60). Хотя Android имеет уровень приложений, он также охватывает весь программный стек, начиная с самого нижнего уровня - операционной системы - и заканчивая уровнем библиотек API и самих приложений.

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

-Ответом Google на iPhone. iPhone представляет собой запатентованную программную и аппаратную платформу компании Apple. В тоже время Android - это набор программ с открытым исходным кодом, разработанный и поддерживаемый Альянс открытых мобильных архитектур. Android предназначен для работы на любых совместимых устройствах.

Заключение

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

Особенности архитектуры платформы Google Android позволили ей выйти на первое место среди других платформ. Главные из них:

1Грамотно разработанное ядро, заимствованное у системы Linux.

2Регистр-ориентированная виртуальная машина Dalvik/ART для выполнения приложений.

Инновационные библиотеки, значительно расширяющие функционал устройств.

4«Легковесная» СУБД SQLite для хранения данных.

5Возможность поддержки 3D и 2D графики, и даже комбинирования их в одном приложении.

Многозадачность и изолированность процессов друг от друга.

Универсальность архитектуры наряду с высоким качеством.

Литература

1)Голощапов А.Л. Google Android: системные компоненты и сетевые коммуникации. - СПб.: БХВ-Петербург, 2012. - 384 c.

2)Фелкер Д. Android: разработка приложений для чайников. - М.: Диалектика, 2012. - 336 с.

3)Хашими С., Коматинени С., Маклин Д. Разработка приложений для Android. - СПб.: Питер, 2011. - 736 с.

4)Майер Р. Android 4. Программирование приложений для планшетных компьютеров и смартфонов. - М.: Эксмо, 2013. - 816 с.

5)Android developer

)Apple developer

Код проекта должен быть разделён на независимые модули, работающие друг с другом как хорошо смазанный механизм - фото Честера Альвареза .

Экосистема средств разработки под Android развивается очень быстро. Каждую неделю кто-то создаёт новые инструменты, обновляет существующие библиотеки, пишет новые статьи, или выступает с докладами. Если вы уедете в отпуск на месяц, то к моменту вашего возвращения уже будет опубликована свежая версия Support Library и/или Google Play Services.

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

Старые добрые времена

В далёком 2012-м структура наших проектов выглядела очень просто. У нас не было никаких библиотек для работы с сетью, и AsyncTask всё ещё был нашим другом. Приведённая ниже диаграмма показывает примерную архитектуру тех решений:


Код был разделён на два уровня: уровень данных (data layer), который отвечал за получение/сохранение данных, получаемых как через REST API, так и через различные локальные хранилища, и уровень представления (view layer), отвечающий за обработку и отображение данных.

APIProvider предоставляет методы, позволяющие активити и фрагментам взаимодействовать с REST API. Эти методы используют URLConnection и AsyncTask , чтобы выполнить запрос в фоновом потоке, а потом доставляют результаты в активити через функции обратного вызова. Аналогично работает и CacheProvider: есть методы, которые достают данные из SharedPreferences или SQLite, и есть функции обратного вызова, которые возвращают результаты.

Проблемы

Главная проблема такого подхода состоит в том, что уровень представления имеет слишком много ответственности. Давайте представим простой сценарий, в котором приложение должно загрузить список постов из блога, закешировать их в SQLite, а потом отобразить в ListView . Activity должна сделать следующее:
  1. Вызвать метод APIProvider#loadPosts(Callback) .
  2. Подождать вызова метода onSuccess() в переданном Callback "е, и потом вызвать CacheProvider#savePosts(Callback) .
  3. Подождать вызова метода onSuccess() в переданном Callback "е, и потом отобразить данные в ListView .
  4. Отдельно обработать две возможные ошибки, которые могут возникнуть как в APIProvider , так и в CacheProvider .
И это ещё простой пример. В реальной жизни может случиться так, что API вернёт данные не в том виде, в котором их ожидает наш уровень представления, а значит Activity должна будет как-то трансформировать и/или отфильтровать данные прежде, чем сможет с ними работать. Или, например, loadPosts() будет принимать аргумент, который нужно откуда-то получить (например, адрес электронной почты, который мы запросим через Play Services SDK). Наверняка SDK будет возвращать адрес асинхронно, через функцию обратного вызова, а значит у нас теперь есть три уровня вложенности функций обратного вызова. Если мы продолжим наворачивать всё больше и больше сложности, то в итоге получим то, что называется callback hell.

Просуммируем:

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

Новая архитектура с применением RxJava

Мы использовали описанный выше подход на протяжении двух лет. В течение этого времени мы внесли несколько изменений, смягчивших боль и страдания от описанных проблем. Например, мы добавили несколько вспомогательных классов, и вынесли в них часть логики, чтобы разгрузить активити и фрагменты, а также мы начали использовать Volley в APIProvider . Несмотря на эти изменения, код всё так же был трудно тестируемым, и callback-hell периодически прорывался то тут, то там.

Ситуация начала меняться в 2014-м году, когда мы прочли несколько статей по RxJava . Мы попробовали её на нескольких пробных проектах, и осознали, что решение проблемы вложенных функций обратного вызова, похоже, найдено. Если вы не знакомы с реактивным программированием, то рекомендуем прочесть вот это введение. Если коротко, RxJava позволяет вам управлять вашими данными через асинхронные потоки (прим. переводчика: в данном случае имеются в виду потоки как streams, не путать с threads - потоками выполнения), и предоставляет множество операторов , которые можно применять к потокам, чтобы трансформировать, фильтровать, или же комбинировать данные так, как вам нужно.

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


Код всё так же разделён на два уровня: уровень данных содержит DataManager и набор классов-помощников, уровень представления состоит из классов Android SDK, таких как Activity , Fragment , ViewGroup , и так далее.

Классы-помощники (третья колонка в диаграмме) имеют очень ограниченные области ответственности, и реализуют их в последовательной манере. Например, большинство проектов имеют классы для доступа к REST API, чтения данных из бд или взаимодействия с SDK от сторонних производителей. У разных приложений будет разный набор классов-помощников, но наиболее часто используемыми будут следующие:

  • PreferencesHelper: работает с данными в SharedPreferences .
  • DatabaseHelper: работает с SQLite.
  • Сервисы Retrofit , выполняющие обращения к REST API. Мы начали использовать Retrofit вместо Volley, потому что он поддерживает работу с RxJava. Да и API у него поприятнее.
Многие публичные методы классов-помощников возвращают RxJava Observables .

DataManager является центральной частью новой архитектуры. Он широко использует операторы RxJava для того, чтобы комбинировать, фильтровать и трансформировать данные, полученные от помощников. Задача DataManager состоит в том, чтобы освободить активити и фрагменты от работы по «причёсыванию» данных - он будет производить все нужные трансформации внутри себя и отдавать наружу данные, готовые к отображению.

Приведённый ниже код показывает, как может выглядеть какой-нибудь метод из DataManager . Работает он следующим образом:

  1. Загружает список постов через Retrofit.
  2. Кеширует данные в локальной базе данных через DatabaseHelper .
  3. Фильтрует посты, отбирая те, что были опубликованы сегодня, так как уровень представления должен отобразить лишь их.
public ObservableLoadTodayPosts() { return mRetrofitService.loadPosts() .concatMap(new Func1Observable>() { @Override public ObservableCall(ListApiPosts) { return mDatabaseHelper.savePosts(apiPosts); } }) .filter(new Func1() { @Override public Boolean call(Post post) { return isToday(post.date); } }); }
Компоненты уровня представления будут просто вызывать этот метод и подписываться на возвращенный им Observable . Как только подписка завершится, посты, возвращённые полученным Observable могут быть добавлены в Adapter , чтобы отобразить их в RecyclerView или чём-то подобном.

Последний элемент этой архитектуры это event bus . Event bus позволяет нам запускать сообщения о неких событиях, происходящих на уровне данных, а компоненты, находящиеся на уровне представления, могут подписываться на эти сообщения. Например, метод signOut() в DataManager может запустить сообщение, оповещающее о том, что соответствующий Observable завершил свою работу, и тогда активити, подписанные на это событие, могут перерисовать свой интерфейс, чтобы показать, что пользователь вышел из системы.

Чем этот подход лучше?


А какие проблемы остались?

  • В больших и сложных проектах DataManager может стать слишком раздутым, и поддержка его существенно затруднится.
  • Хоть мы и сделали компоненты уровня представления (такие, как активити и фрагменты) более легковесными, они всё ещё содержат заметное количество логики, крутящейся около управления подписками RxJava, анализа ошибок, и прочего.

Пробуем Model View Presenter

В течение прошлого года в Android-сообществе начали набирать популярность отдельные архитектурные шаблоны, так как MVP , или MVVM . После исследования этих шаблонов в тестовом проекте , а также отдельной статье , мы обнаружили, что MVP может привнести значимые изменения в архитектуру наших проектов. Так как мы уже разделили код на два уровня (данных и представления), введение MVP выглядело натурально. Нам просто нужно было добавить новый уровень presenter"ов, и перенести в него часть кода из представлений.


Уровень данных остаётся неизменным, но теперь он называется моделью , чтобы соответствовать имени соответствующего уровня из MVP.

Presenter "ы отвечают за загрузку данных из модели и вызов соответствующих методов на уровне представления, когда данные загружены. Presenter"ы подписываются на Observables , возвращаемые DataManager . Следовательно, они должны работать с такими сущностями как подписки и планировщики . Более того, они могут анализировать возникающие ошибки, или применять дополнительные операторы к потокам данных, если необходимо. Например, если нам нужно отфильтровать некоторые данные, и этот фильтр скорее всего нигде больше использоваться не будет, есть смысл вынести этот фильтр на уровень presenter"а, а не DataManager .

Ниже представлен один из методов, которые могут находиться на уровне presenter"а. Тут происходит подписка на Observable , возвращаемый методом dataManager.loadTodayPosts() , который мы определили в предыдущем разделе.

Public void loadTodayPosts() { mMvpView.showProgressIndicator(true); mSubscription = mDataManager.loadTodayPosts().toList() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber>() { @Override public void onCompleted() { mMvpView.showProgressIndicator(false); } @Override public void onError(Throwable e) { mMvpView.showProgressIndicator(false); mMvpView.showError(); } @Override public void onNext(ListPostsList) { mMvpView.showPosts(postsList); } }); }
mMvpView - это компонент уровня представления, с которым работает presenter. Обычно это будет Activity , Fragment или ViewGroup .

Как и в предыдущей архитектуре, уровень представления содержит стандартные компоненты из Android SDK. Разница в том, что теперь эти компоненты не подписываются напрямую на Observables . Вместо этого они имплементируют интерфейс MvpView , и предоставляют список внятных и понятных методов, таких как showError() или showProgressIndicator() . Компоненты уровня представления отвечают также за обработку взаимодействия с пользователем (например, события нажатия), и вызов соответствующих методов в presenter"е. Например, если у нас есть кнопка, которая загружает список постов, наша Activity должна будет вызвать в OnClickListener "е метод presenter.loadTodayPosts() .

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

Чем этот подход лучше?

  • Активити и фрагменты становятся ещё более легковесными, так как их работа сводится теперь к отрисовке/обновлению пользовательского интерфейса и обработке событий взаимодействия с пользователем. Тем самым, их становится ещё проще поддерживать.
  • Писать юнит-тесты для presenter"ов очень просто - нужно просто замокировать уровень представления. Раньше этот код был частью уровня представления, и провести его юнит-тестирование не представлялось возможным. Архитектура становится ещё более тестируемой.
  • Если DataManager становится слишком раздутым, мы всегда можем перенести часть кода в presenter"ы.

А какие проблемы остались?

  • В случае большого количества кода DataManager всё так же может стать слишком раздутым. Пока что это не произошло, но мы не зарекаемся от подобного развития событий.

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

Я надеюсь, вам понравилась моя статья, и вы нашли её полезной. Если так, не забудьте нажать на кнопку Recommend (прим. переводчика: перейдите на оригинальную статью, и нажмите на кнопку-сердечко в конце статьи). Также, я хотел бы выслушать ваши мысли по поводу нашего текущего подхода.




Top