- Файл манифеста что это андроид
- Определение версии
- Установка версии SDK
- Установка разрешений
- Поддержка разных разрешений
- Запрет на изменение ориентации
- Файл манифеста AndroidManifest.xml
- Назначение файла
- Общая структура манифеста
- Описание
- Атрибуты
- Работа с манифестом Android
- Основы
- Activity Name
- Строка заголовка действия
- Доступный для запуска из программы выбора приложений
- Значок действия
- Разрешения
- Дополнительные функции
- Действия и компоненты намерения
- Элемент Application
Файл манифеста что это андроид
Каждое приложение содержит файл манифеста AndroidManifest.xml . Данный файл определяет важную информацию о приложении — название, версию, иконки, какие разрешения приложение использует, регистрирует все используемые классы activity, сервисы и т.д. Данный файл можно найти в проекте в папке manifests :
Файл манифеста может выглядеть так:
Элементом корневого уровня является узел manifest . В данном случае только определяется пакет приложения — package=»com.example.viewapp» . Собственно это определение файла манифеста по умолчанию. В каждом конкретном случае может отличаться пакет приложения, остальное содержимое при создании проекта с пустой activity будет аналогичным.
Большинство настроек уровня приложения определяются элементом application . Ряд настроек задаются с помощью атрибутов. По умолчанию применяются следующие атрибуты:
android:allowBackup указывает, будет ли для приложения создаваться резервная копия. Значение android:allowBackup=»true» разрешает создание резервной копии.
android:icon устанавливает иконку приложения. При значении android:icon=»@mipmap/ic_launcher» иконка приложения берется из каталога res/mipmap
android:roundIcon устанавливает круглую иконку приложения. Также берется из каталога res/mipmap
android:label задает название приложение, которое будет отображаться на мобильном устройстве в списке приложений и в заголовке. В данном случае оно хранится в строковых ресурсах — android:label=»@string/app_name» .
android:supportsRtl указывает, могут ли использоваться различные RTL API — специальные API для работы с правосторонней ориентацией текста (например, для таких языков как арабский или фарси).
android:theme устанавливает тему приложения. Подробно темы будут рассмотрены далее, а пока достаточно знать, что тема определяет общий стиль приложения. Значение @style/Theme.ViewApp» берет тему «Theme.ViewApp» из каталога res/values/themes
Вложенные элементы activity определяют все используемые в приложении activity. В данном случае видно, что в приложении есть только одна activity — MainActivity.
Элемент intent-filter в MainActivity указывает, как данная activity будет использоваться. В частности, с помощью узла action android:name=»android.intent.action.MAIN» , что данная activity будет входной точкой в приложение и не должна получать какие-либо данные извне.
Элемент category android:name=»android.intent.category.LAUNCHER» указывает, что MainActivity будет представлять стартовый экран, который отображается при запуске приложения.
Файл манифеста может содержать множество элементов, которые имеют множество атрибутов. И все возможные элементы и их атрибуты можно найти в документации. Здесь же рассмотрим некоторые примеры использования.
Определение версии
С помощью атрибутов элемента manifest можно определить версию приложения и его кода:
Атрибут android:versionName указывает на номер версии, который будет отображаться пользователю и на которую будут ориентироваться пользователи при работе с приложением.
Тогда как атрибут android:versionCode представляет номер версии для внутреннего использования. Этот номер только определяет, что одна версия приложения более новая, чем какая-то другая с меньшим номером номером версии. Этот номер не отображается пользователям.
При желании мы также можем определить версию в ресурсах, а здесь ссылаться на ресурс.
Установка версии SDK
Для управления версией android sdk в файле манифеста определяется элемент . Он может использовать следующие атрибуты:
minSdkVersion : минимальная поддерживаемая версия SDK
targetSdkVersion : оптимальная версия
maxSdkVersion : максимальная версия
Версия определяется номером API, например, Jelly Beans 4.1 имеет версию 16, а Android 11 имеет версию 30:
Установка разрешений
Иногда приложению требуются разрешения на доступ к определенным ресурсам, например, к списку контактов, камере и т.д. Чтобы приложение могло работать с тем же списком контактов, в файле манифесте необходимо установить соответствующие разрешения. Для установки разрешений применяется элемент :
Атрибут android:name устанавливает название разрешения: в данном случае на чтение списка контактов и использование камеры. Опционально можно установить максимальную версию sdk посредством атрибута android:maxSdkVersion , который принимает номер API.
Поддержка разных разрешений
Мир устройств Android очень сильно фрагментирован, здесь встречаются как гаджеты с небольшим экраном, так и большие широкоэкранные телевизоры. И бывают случаи, когда надо ограничить использование приложения для определенных разрешений экранов. Для этого в файле манифеста определяется элемент :
Данный элемент принимает четыре атрибута:
android:largeScreens — экраны с диагональю от 4.5 до 10″
android:normalScreens — экраны с диагональю от 3 до 4.5″
android:smallScreens — экраны с диагональю меньше 3″
android:xlargeScreens — экраны с диагональю больше 10″
Если атрибут имеет значение true , то приложение будет поддерживаться соответствующим размером экрана
Запрет на изменение ориентации
Приложение в зависимости от положения гаджета может находиться в альбомной и портретной ориентации. Не всегда это бывает удобно. Мы можем сделать, чтобы приложение вне зависимости от поворота гаджета использовало только одну ориентацию. Для этого в файле манифеста у требуемой activity надо установить атрибут android:screenOrientation . Например, запретим альбомную ориентацию:
Значение android:screenOrientation=»portrait» указывает, что данная activity будет находиться только в портретной ориентации. Если же надо установить только альбомную ориентацию, тогда надо использовать значение android:screenOrientation=»landscape»
Файл манифеста AndroidManifest.xml
Файл манифеста AndroidManifest.xml предоставляет основную информацию о программе системе. Каждое приложение должно иметь свой файл AndroidManifest.xml. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor (Редактор файла манифеста), который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения.
Назначение файла
- объявляет имя Java-пакета приложения, который служит уникальным идентификатором;
- описывает компоненты приложения — деятельности, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявляет их намерения;
- содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;
- объявляет разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
- объявляет минимальный уровень API Android, необходимый для работы приложения;
- перечисляет связанные библиотеки;
Общая структура манифеста
Файл манифеста инкапсулирует всю архитектуру Android-приложения, его функциональные возможности и конфигурацию. В процессе разработки приложения вам придется постоянно редактировать данный файл, изменяя его структуру и дополняя новыми элементами и атрибутами.
Корневым элементом манифеста является . Помимо данного элемента обязательными элементами является теги и . Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Кроме обязательных элементов, упомянутых выше, в манифесте по мере необходимости используются другие элементы.
Описание
Элемент является корневым элементом манифеста. По умолчанию Eclipse создает элемент с четырьмя атрибутами:
Атрибуты
объявляет разрешение, которое используется для ограничения доступа к определенным компонентам или функциональности данного приложения. В этой секции описываются права, которые должны запросить другие приложения для получения доступа к вашему приложению. Приложение может также защитить свои собственные компоненты (деятельности, службы, приемники широковещательных намерений и контент-провайдеры) разрешениями. Оно может использовать любое из системных разрешений, определенных Android или объявленных другими приложениями, а также может определить свои собственные разрешения.
android:name название разрешения android:label имя разрешения, отображаемое пользователю android:description описание разрешения android:icon значок разрешения android:permissionGroup определяет принадлежность к группе разрешений android:protectionLevel уровень защиты
Элемент запрашивает разрешение, которые приложению должны быть предоставлены системой для его нормального функционирования. Разрешения предоставляются во время установки приложения, а не во время его работы.
android:name имеет единственный атрибут с именем разрешения android:name. Это может быть разрешение, определенное в элементе
данного приложения, разрешение, определенное в другом приложении или одно из стандартных системных разрешений, например: android:name=»android.permission.CAMERA» или android:name=»»android.permission.READ_CONTACTS»
Наиболее распространенные разрешения
- INTERNET — доступ к интернету
- READ_CONTACTS — чтение (но не запись) данных из адресной книги пользователя
- WRITE_CONTACTS — запись (но не чтение) данных из адресной книги пользователя
- RECEIVE_SMS — обработка входящих SMS
- ACCESS_COARSE_LOCATION — использование приблизительного определения местонахождения при помощи вышек сотовой связи или точек доступа Wi-Fi
- ACCESS_FINE_LOCATION — точное определение местонахождения при помощи GPS
объявляет базовое имя для дерева разрешений. Этот элемент объявляет не само разрешение, а только пространство имен, в которое могут быть помещены дальнейшие разрешения.
определяет имя для набора логически связанных разрешений. Это могут быть как объявленные в этом же манифесте с элементом
разрешения, так и объявленные в другом месте. Этот элемент не объявляет разрешение непосредственно, только категорию, в которую могут быть помещены разрешения. Разрешение можно поместить в группу, назначив имя группы в атрибуте permissionGroup элемента
Работа с манифестом Android
AndroidManifest.xml — это мощный файл на платформе Android, который позволяет описать функциональные возможности и требования приложения к Android. Тем не менее, работа с ним не является простой. Xamarin.Android помогает свести к минимуму эту трудность, позволяя добавлять настраиваемые атрибуты в классы, которые затем будут использоваться для автоматического создания манифеста. Наша цель заключается в том, что 99% пользователей никогда не должны вручную изменять AndroidManifest.xml.
AndroidManifest.xml создается как часть процесса сборки, а XML-код, найденный в свойствах или AndroidManifest.xml , объединяется с XML, созданным из пользовательских атрибутов. Результирующий объединенный AndroidManifest.xml находится в подкаталоге obj ; например, он находится в obj/Debug/android/AndroidManifest.xml для сборок отладки. Процесс слияния прост: он использует настраиваемые атрибуты в коде для создания XML-элементов и вставляет эти элементы в AndroidManifest.xml.
Основы
Во время компиляции сборки проверяются на наличие классов, abstract не являющихся производными от действия , и [Activity] атрибут объявляется на них. Затем для создания манифеста используются эти классы и атрибуты. Рассмотрим следующий пример кода:
Это приводит к тому, что в AndroidManifest.xmlне создается ничего. Если требуется создать элемент, необходимо использовать [Activity] настраиваемый атрибут:
Этот пример приводит к добавлению следующего фрагмента XML в AndroidManifest.xml:
Атрибут [Activity] не влияет на abstract типы; abstract типы игнорируются.
Activity Name
Начиная с версии Xamarin.Android 5.1 имя типа действия основано на MD5SUM имени экспортируемого типа. Это позволяет предоставить одно и то же полное имя из двух разных сборок и не получить ошибку упаковки. (До Xamarin.Android 5.1 имя типа действия по умолчанию было создано из нижнего регистра пространства имен и имени класса.)
Если вы хотите переопределить это значение по умолчанию и явно указать имя действия, используйте Name свойство:
В этом примере создается следующий фрагмент XML:
Свойство следует использовать Name только по причинам обратной совместимости, так как такое переименование может замедлить поиск типов во время выполнения. Если у вас есть устаревший код, который ожидает, что имя типа по умолчанию действия будет основано на нижнем регистре пространства имен и имени класса, см. в статье Об именовании вызываемого оболочки Android , чтобы получить советы по поддержанию совместимости.
Строка заголовка действия
По умолчанию Android предоставляет приложению строку заголовка при запуске. Для этого используется /manifest/application/activity/@android:label значение . В большинстве случаев это значение будет отличаться от имени класса. Чтобы указать метку приложения в заголовке строки, используйте Label свойство. Например:
В этом примере создается следующий фрагмент XML:
Доступный для запуска из программы выбора приложений
По умолчанию ваше действие не будет отображаться на экране средства запуска приложений Android. Это связано с тем, что в приложении, скорее всего, будет много действий, и вы не хотите значок для каждого из них. Чтобы указать, какой из них должен быть запущен из средства запуска приложений, используйте MainLauncher свойство. Например:
В этом примере создается следующий фрагмент XML:
Значок действия
По умолчанию ваше действие будет присвоено значку средства запуска по умолчанию, предоставленному системой. Чтобы использовать пользовательский значок, сначала добавьте .png в ресурсы или рисование, задайте для свойства действие сборки AndroidResource, а затем используйте Icon свойство, чтобы указать используемый значок. Например:
В этом примере создается следующий фрагмент XML:
Разрешения
При добавлении разрешений в манифест Android (как описано в разделе «Добавление разрешений в манифест Android»), эти разрешения записываются в свойства или AndroidManifest.xml. Например, если вы задали INTERNET разрешение, следующий элемент добавляется в properties/AndroidManifest.xml:
Отладочные сборки автоматически задают некоторые разрешения для упрощения отладки (например INTERNET , и READ_EXTERNAL_STORAGE ) — эти параметры задаются только в созданном obj/debug/android/AndroidManifest.xml и не отображаются как включенные в параметрах необходимых разрешений .
Например, при проверке созданного файла манифеста в obj/Debug/android/AndroidManifest.xmlмогут отображаться следующие добавленные элементы разрешений:
В версии сборки выпуска манифеста (в obj/Debug/android/AndroidManifest.xml) эти разрешения не настраиваются автоматически. Если вы обнаружите, что переключение на сборку выпуска приводит к потере приложения разрешения, доступного в сборке отладки, убедитесь, что вы явно задали это разрешение в параметрах необходимых разрешений для приложения (см. раздел «Сборка > приложения Android в Visual Studio для Mac; см. раздел «Свойства > манифеста Android» в Visual Studio).
Дополнительные функции
Действия и компоненты намерения
Манифест Android предоставляет способ описания возможностей вашего действия. Это делается с помощью намерений и [IntentFilter] настраиваемый атрибут. Вы можете указать, какие действия подходят для действия с помощью IntentFilter конструктор, и какие категории подходят дляСвойство Categories . Необходимо предоставить по крайней мере одно действие (поэтому действия предоставляются в конструкторе). [IntentFilter] может быть предоставлено несколько раз, и каждое использование приводит к отдельному элементу внутри . Например:
В этом примере создается следующий фрагмент XML:
Элемент Application
Манифест Android также предоставляет способ объявления свойств для всего приложения. Это делается с помощью элемента и его аналога настраиваемого атрибута Application . Обратите внимание, что это параметры на уровне приложения (на уровне сборки), а не параметры для каждого действия. Как правило, вы объявляете свойства для всего приложения, а затем переопределяете эти параметры (по мере необходимости) на основе каждого действия.
Например, следующий Application атрибут добавляется в файл AssemblyInfo.cs , чтобы указать, что приложение можно отлаживать, что его имя, доступное для чтения пользователем, — «Мое приложение«, и что он использует Theme.Light стиль в качестве темы по умолчанию для всех действий:
Это объявление приводит к созданию следующего фрагмента XML в obj/Debug/android/AndroidManifest.xml:
В этом примере все действия в приложении по умолчанию будут использовать Theme.Light стиль. Если для темы Theme.Dialog действия задано значение ,только это действие будет использовать Theme.Dialog стиль, а все остальные действия в приложении будут по умолчанию Theme.Light использовать стиль, заданный в элементе .
В элементе можно настроить множество атрибутов на уровне приложения. Дополнительные сведения об этих параметрах см. в разделе » Общедоступные свойства » applicationAttribute.