August 5, 2020

Архитектура Android-приложений. Часть 3

В этой статье будут представлены основные «персонажи» архитектуры Android-приложения.

В общем случае, Android-приложение состоит из:

  • Java-классов, являющихся подклассами основных классов из Android SDK (View, Activity, ContentProvider, Service, BroadcastReciever, Intent) и Java-классов, у которых нет родителей в Android SDK.
  • Манифеста приложения
  • Ресурсов наподобие строк, изображений и т.п.
  • Файлов

Манифест Android

МанифестAndroid — ещё одна важная часть Android-приложения. Идея была навеяна манифестами плагинов для Eclipse.

Манифест Android представляет собой XML файл и выполняет несколько функций. Вот как их описывает Googlпределяет имя Java-пакета приложения. Имя пакета представляет собой уникальный идентификатор для приложения.

Описывает компоненты приложения — активити, сервисы, броадкаст-ресиверы и контент-провайдеры. Определяет имена классов, реализующие каждый из компонентов и оглашает их возможности (например, какие Intent-сообщения они могут обрабатывать). Эти объявления позволяют системе Android знать, какие компоненты и при каких условиях могут быть запущены.

Предопределяет процессы, которые будут содержать компоненты приложения.

Объявляет разрешения, которые приложение должно иметь для доступа к защищённым частям API и взаимодействия с другими приложениями.

Также объявляет разрешения, которые требуются для доступа к компонентам приложения.

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

Объявляет минимальный уровень Android API, который требует приложение.

Перечисляет библиотеки, с которыми приложение должно быть связано.

Обратите внимание на второй пункт. Имеется ввиду, что если некий класс расширяет Activity, ContentProvider, BroadcastReceiver или Service в вашем приложении, этот класс не может быть использован до тех пор, пока он не описан в манифесте.

Ресурсы

Каждое современное GUI приложение в той или иной форме использует ресурсы. Android-приложения — не исключение. Они используют следующие типы ресурсов:

  • Изображения
  • Слои GUI (XML файлы)
  • Объявления меню (XML файлы)
  • Текстовые строки

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

Давайте рассмотрим следующий пример. Файл с именем mybutton.png содержит картинку для кнопки. Разработчик совершает ошибку и набирает mybuton.png, ссылаясь на ресурс из кода. Как итог, код пытается использовать несуществующий ресурс, но компиляция пройдёт успешно. Ошибка может быть обнаружена только в ходе тестирования (а может и не быть обнаружена вовсе).

Ребята из Google нашли элегантное решение этой проблемы. При сборке Android-приложения генерируется специальный Java-класс с именем R (всего лишь одна буква). Этот класс содержит несколько static final наборов данных. Каждый такой набор данных — ссылка на отдельный ресурс. Эти ссылки используются в коде приложения для связи с ресурсами. Теперь каждая ошибка в ссылке на ресурсы проявляет себя в процессе компиляции.

Манифест Android

Манифест Android


Манифест Android — ещё одна важная часть Android-приложения. Идея была навеяна манифестами плагинов для Eclipse.

Манифест Android представляет собой XML файл и выполняет несколько функций. Вот как их описывает Google:

Определяет имя Java-пакета приложения. Имя пакета представляет собой уникальный идентификатор для приложения.