Обзор
Каждое приложение должно иметь файл AndroidManifest.xml (именно с таким именем) в его корневой папке. Манифест содержит информацию о приложении для ОС Android, эта информация необходима системе прежде чем она запустит какой-либо код на исполнение. Среди прочих вещей, манифест делает следующие вещи:
- Он содержит название пакета Java. Это имя является уникальным идентификатором для приложения.
- Он описывает компоненты приложения - activities, services, broadcast receivers, и content providers, из которых состоит приложение. Оно содержит имена для классов, которые описывают каждый компонент и описывает условия их использования (к примеру, какие сообщения интент может принимать). Эти описания предоставляют информацию ОС Android о компонентах приложения и о условиях их выполнения.
- Он определяет какие процессы будут обрабатывать компоненты приложения
- Он описывает разрешения(permissions), которые необходимы приложению для работы с защищенными частями API и с другими приложениями.
- А так же содержит разрешения(permissions), которые необходимы для связи с компонентами системы.
- Содержит списки классов, используемых для профилирования и для получения другой информации о приложении во время исполнения. Эти описания присутствуют только при разработке и тестировании. Перед публикацией они удаляются из манифеста.
- Он описывает минимальный уровень Android API, необходимый для приложения
- Он содержит список библиотек, с которыми приложение должно быть слинковано
Структура файла
Диаграмма, показанная ниже, описывает основную структуру файла манифеста и каждый элемент, который он может в себе содержать.
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<uses-library />
<uses-configuration />
</application>
</manifest>
Правила для файла
- Обязательны только <manifest> и <application> элементы
- Все параметры передаются только через атрибуты
- Только элементы - между тегов не может быть обычного текста
- Порядок элементов не важен. Единственное исключение <application-alias> должен следовать за соответствующим <application>
- Формально аттрибуты не обязательно, но многие элементы имеют обязательные параметры. Смотрите документацию
- Все, кроме <manifest>, имеют перед параметры, начинающиеся с “
android:"
- Имена классов почти всегда пишутся полностью с именем пакета, ислючение - классы в пакете, который указан в манифесте - их просто можно начинать с точки
- Имена ресурсов пишутся так: @[package:]type/name, для тем - ?[package:]type/name
Возможности Манифеста
Intent Filters
Интенты - основа метода вызова компонентов приложения. Интент - это некий набор данных. Содержит себе название действия, некоторые его параметры, а так же еще некоторые инструкции.
Система получает интент, создает экземпляр объекта (если нужно), а потом передает в этот объект этот интент.
Для того, что бы компонент мог принять интент существуют intent-filters и они описываются в манифесте тегом <intent-filter>, в котором можно задать условия принятия интента.
Иконки и Текст
Некоторые элементы содержат поля icon, label и description.
К примеру, в permission’е все эти три поля есть. Эти три поля используются тогда, когда необходимо предоставить разрешение приложению и пользователю показываются необходимая иконка и текст.
Permissions
Permission - это способ получить доступ к закрытой части API. Эта защита существует для защиты пользователя от приложения.
Для того, что бы показать, что приложение использует Permission необходимо прописать тег. Эти Permissions показываются, к примеру, при установке приложения.
У приложения могут быть свои компоненты с разрешениями для их использования - они задаются через тег