Как редактировать AndroidManifest.xml, если он пересоздается при сборке?
Решил прописать в AndroidManifest.xml портретную ориентацию экрана.
Для этого нужно в файле AndroidManifest.xml найти свойство:
android:screenOrientation="unspecified"
и установить его значение в «portrait».
Сам файл AndroidManifest.xml я нашел в каталоге
../build-GeoPosition-Android_armeabi_v7a_GCC_4_9_Qt_Qt_5_9_2_for_Android_armv7-Debug/android-build
Но проблема в том, что даже если я изменяю этот файл, и нажимаю пересборку проекта, данный файл пересоздается, и мои настройки пропадают.
Вопрос: как редактировать файл AndroidManifest.xml так, чтобы настройки в нем сохранялись даже при пересборке проекта?
Файл манифеста AndroidManifest.xml
Файл манифеста AndroidManifest.xml предоставляет основную информацию о программе системе. Каждое приложение должно иметь свой файл AndroidManifest.xml. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor (Редактор файла манифеста), который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения.
Назначение файла
- объявляет имя Java-пакета приложения, который служит уникальным идентификатором;
- описывает компоненты приложения — деятельности, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявляет их намерения;
- содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;
- объявляет разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
- объявляет минимальный уровень API Android, необходимый для работы приложения;
- перечисляет связанные библиотеки;
Общая структура манифеста
Файл манифеста инкапсулирует всю архитектуру Android-приложения, его функциональные возможности и конфигурацию. В процессе разработки приложения вам придётся постоянно редактировать данный файл, изменяя его структуру и дополняя новыми элементами и атрибутами.
Корневым элементом манифеста является . Помимо данного элемента обязательными элементами является теги и . Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Кроме обязательных элементов, упомянутых выше, в манифесте по мере необходимости используются другие элементы.
Описание
Элемент является корневым элементом манифеста.
Атрибуты
xmlns:android определяет пространство имён Android. Оно всегда одно и то же package определяет уникальное имя пакета приложения, которое вы задали при создании проекта. Android Marketplace проверяет уникальность при приеме приложения, поэтому рекомендуется использовать свое имя для избежания конфликтов с другими разработчиками. Например, я использую имя своего сайта в обратном порядке: ru.alexanderklimov.appname. Сейчас в студии данный атрибут перекочевал в build.gradle в виде namespace в секции android. Из манифеста атрибут убрали. android:versionCode указывает на внутренний номер версии, используемый для сравнения версий программы. «versionCode» должен быть целым, и Android Market использует это для определения, предоставили ли вы новую версию, передавая триггеру обновления на устройствах, на которых установлено ваше приложение. Как правило. начинается с 1 и увеличивается на единицу, если вы выпускаете новую версию приложения. Сейчас в студии данный атрибут перекочевал в build.gradle android:versionName указывает номер пользовательской версии. Можно использовать строку или строковый ресурс. Этот номер видит пользователь. Сейчас в студии данный атрибут перекочевал в build.gradle
Читайте совет Получить номер версии программы
Элемент объявляет разрешение, которое используется для ограничения доступа к определенным компонентам или функциональности данного приложения. В этой секции описываются права, которые должны запросить другие приложения для получения доступа к вашему приложению. Приложение может также защитить свои собственные компоненты (деятельности, службы, приемники широковещательных намерений и контент-провайдеры) разрешениями. Оно может использовать любое из системных разрешений, определенных 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 элемента .
Элемент объявляет объект instrumentation, который дает возможность контролировать взаимодействие приложения с системой. Обычно используется при отладке и тестировании приложения и удаляется из release-версии приложения.
Элемент позволяет объявлять совместимость приложения с указанной версией (или более новыми версиями API) платформы Android. Уровень API, объявленный приложением, сравнивается с уровнем API системы мобильного устройства, на который инсталлируется данное приложение.
Атрибуты
android:minSdkVersion определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте. Вы должны всегда объявлять этот атрибут, например: android:minSdkVersion=»11″. Вы можете ради интереса установить значение 7, а потом 11 и сравнить внешний вид приложения. Например, у младшей версии не будет отображаться ActionBar. android:maxSDKVersion позволяет определить самую позднюю версию, которую готова поддерживать ваша программа. Ваше приложение будет невидимым в Google Play для устройств с более свежей версией. Рекомендуется устанавливать в том случае, когда вы точно уверены, что приложение не будет корректно работать на новой платформе. targetSDKVersion позволяет указать платформу, для которой вы разрабатывали и тестировали приложение. Устанавливая значение для этого атрибута, вы сообщаете системе, что для поддержки этой конкретной версии не требуется никаких изменений.
Элемент указывает требуемую для приложения аппаратную и программную конфигурацию мобильного устройства. Например, приложение могло бы определить требования обязательного наличия на устройстве физической клавиатуры или USB-nopTa. Спецификация используется, чтобы избежать установки приложения на устройствах, которые не поддерживают требуемую конфигурацию. Если приложение может работать с различными конфигурациями устройства, необходимо включить в манифест отдельные элементы для каждой конфигурации. Вы можете задать любую комбинацию, содержащие следующие устройства
- reqFiveWayNav — используйте значение true, если приложению требуется устройство ввода, поддерживающее навигацию вверх, вниз, влево, вправо, а также нажатие выделенного элемента. К таким устройствам относятся трекболы и D-pad. В принципе устарело
- reqHardKeyboard — используйте значение true, если приложению нужна аппаратная клавиатура.
- reqKeyboardType — позволяет задать тип клавиатуры: nokeys, qwerty, twelvekey, undefined
- reqNavigation — укажите одно из значений: nonav, dpad, trackball, wheel или undefined, если требуется устройство для навигации
- reqTouchScreen — если требуется сенсорный экран, то используйте нужное значение из возможных вариантов: notouch, stylus, finger, undefined. Сейчас практически все устройства содержат сенсорный экран, поэтому тоже устарело
Приложение не будет устанавливаться на устройстве, которое не соответствует заданной вами конфигурации. В идеале, вы должны разработать такое приложение, которое будет работать с любым сочетанием устройств ввода. В этом случае не нужен.
Элемент объявляет определенную функциональность, требующуюся для работы приложения. Таким образом, приложение не будет установлено на устройствах, которые не имеют требуемую функциональность. Например, приложение могло бы определить, что оно требует камеру с автофокусом. Если устройство не имеет встроенную камеру с автофокусом, приложения не будет инсталлировано.
android.hardware.camera требуется аппаратная камера android.hardware.camera.autofocus требуется камера с автоматической фокусировкой
Список можно увидеть здесь.
Можно переопределить требование по умолчанию, добавив атрибут required со значением false. Например, если вашей программе не требуется, чтобы камера поддерживала автофокус, то используйте вариант:
Элемент определяет разрешение экрана, требуемое для функционирования устройства. Данный тег позволяет указать размеры экран, для которого был спроектировано приложение. Система будет масштабировать ваше приложение на основе ваших макетов на тех устройствах, которые поддерживают указанные вами разрешения экран. Для других случаев система будет растягивать макет по мере возможности.
smallScreen как правило экраны QVGA normalScreen стандартные экраны HVGA и WQVGA largeScreen большие экраны xlargeScreen очень большие экраны, которые превосходят размеры планшетов anyDensity установите значение true, если ваше приложение способно масштабироваться для отображения на экране с любым разрешением.
По умолчанию, для каждого атрибута установлено значение true. Вы можете указать, какие размеры экранов ваше приложение не поддерживает.
Начиная с API 13 (Android 3), у тега появились новые атрибуты:
- requiresSmallestWidthDp — указываем минимальную поддерживаемую ширину экрана (наименьшая сторона устройства) в аппаратно-независимых пикселях. С его помощью можно отфильтровать устройства при размещении приложения в Google Play
- compatibleWidthLimitDp — задаёт верхнюю границу масштабирования для вашего приложения. Если экран устройства выходит за указанную границу, система включит режим совместимости.
- largestWidthLimitDp — задаёт абсолютную верхнюю границу, за пределами которой ваше приложение точно не может быть смаштабировано. В этом случае приложение запускается в режиме совместимости, которую нельзя отключить. Следует избегать подобных ситуаций и разрабатывать макеты для любых экранов.
Элемент один из основных элементов манифеста, содержащий описание компонентов приложения, доступных в пакете: стили, значок и др. Содержит дочерние элементы, которые объявляют каждый из компонентов, входящих в состав приложения. В манифесте может быть только один элемент .
Элемент объявляет активность. Если приложение содержит несколько активностей, не забывайте объявлять их в манифесте, создавая для каждой из них свой элемент . Если активность не объявлена в манифесте, она не будет видна системе и не будет запущена при выполнении приложения или будет выводиться сообщение об ошибке.
Для этого класса зарегистрирован фильтр вызовов, определяющий, что это действие запущено в приложении (действие android:name=«android.intent.action.MAIN»). Определение категории (категория android:name=«android.intent.category.LAUNCHER» ) определяет, что это приложение добавлено в директорию приложений на Android-устройстве. Значения @ направляют файлы ресурсов, которые содержат актуальные значения. Это упрощает работу с разными ресурсами, такими как строки, цвета, значки.
Атрибуты
android:name имя класса. Имя должно включать полное обозначение пакета, но т. к. имя пакета уже определено в корневом элементе
android:exported Позволяет или запрещает запускать активность другим приложениям. Если атрибута нет, то по умолчанию равно false и другие приложения не могут запускать вашу активность. Но если у активности есть интент-фильтры, то по умолчанию это значение будет уже равно true. Это может запутать новичков. Поэтому, если вы хотите запретить запуск через сторонние приложения, то явно указывайте нужное значение.
Элемент содержит множество других атрибутов, определяющих разрешения, ориентацию экрана и т. д.
Изменение конфигурации во время выполнения программы
При изменении языка, региона или аппаратной конфигурации Android прерывает работу всех приложений и затем запускает их повторно, перезагружая значения из ресурсов. Подобное поведение не всегда уместно и желательно. Например, некоторые изменения конфигурации (ориентация экрана в пространстве, доступность клавиатуры) могут произойти только лишь из-за того, что пользователь повернул устройство или выдвинул клавиатуру. Вы можете настраивать, каким образом ваше приложение будет реагировать на подобные изменения, обнаруживая их и выполняя собственные действия. Чтобы заставить Активность отслеживать изменения конфигурации при выполнении программы, добавьте в ее узел в манифесте атрибут android:configChanges, указав, какие именно события хотите обрабатывать.
Перечислим некоторые значения, с помощью которых можно описать изменения конфигурации:
- оrientation — положение экрана изменено с портретного на альбомное (или наоборот);
- keyboardHidden — клавиатура (или D-pad и другое устройство) выдвинута или спрятана;
- fontScale — пользователь изменил предпочтительный размер шрифта;
- locale — пользователь выбрал новые языковые настройки;
- keyboard — изменился тип клавиатуры; например, телефон может иметь 12-клавишную панель, при повороте которой появляется полноценная клавиатура. Или была подключена внешняя клавиатура.
- touchscreen или navigation — изменился тип клавиатуры или способ навигации. Как правило, такие события не встречаются.
- mcc или mnc — обнаружена новая SIM-карта, при этом изменились страна и код сотовой сети соответственно.
- uiMode — изменился режим пользовательского интерфейса, например, при переключении между автомобильным, дневным и ночным режимами.
- screenLayout — изменились характеристики экрана, например, при активации другого дисплея.
- screenSize — изменлись размеры экрана, например, при смене ориентации. Появилось в Android 3 (API 12)
- smallestScreenSize — изменился физический размер экрана, например, при подключении внешнего дисплея. Появилось в Android 3 (API 12)
В некоторых случаях одновременно будут срабатывать несколько событий. Например, когда пользователь выдвигает клавиатуру, большинство устройств генерируют события keyboardHidden и orientation. Вы можете выбирать несколько событий, которые хотите обрабатывать самостоятельно, разделяя их символом |.
Наличие атрибута android:configChanges отменяет перезапуск приложения при заданных изменениях конфигурации. Вместо этого внутри активности срабатывает метод onConfigurationChanged(). Переопределите его, чтобы появилась возможность обрабатывать изменения в конфигурации. Используйте переданный объект Configuration, чтобы получить новые значения. Не забудьте вызвать одноименный метод из родительского класса и перезагрузить измененные значения со всех ресурсов, которые используются внутри активности.
@Override public void onConfigurationChanged(Configuration _newConfig) < super.onConfigurationChanged(_newConfig); [ . Обновите пользовательский интерфейс, используя данные из ресурсов . ] if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) < [ . Реакция на измененную ориентацию экрана . ] >if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) < [ . Реакция на выдвигание/задвигание клавиатуры . ] >>
На момент вызова метода, все данные из ресурсов будут обновлены, поэтому применять метод можно без опаски.
Любые изменения конфигурации, которые не были явно помечены для обработки внутри вашего приложения, приведут к перезапуску активности, минуя вызов метода onConfigurationChanged().
Каждый тег поддерживает вложенные узлы . Элемент определяет типы намерений, на которые могут ответить деятельность, сервис или приемник намерений. Фильтр намерений объявляет возможности его родительского компонента — что могут сделать деятельность или служба и какие типы рассылок получатель может обработать. Фильтр намерений предоставляет для компонентов-клиентов возможность получения намерений объявляемого типа, отфильтровывая те, которые не значимы для компонента, и содержит дочерние элементы , , .
Элемент добавляет действие к фильтру намерений. Элемент должен содержать один или более элементов . Если в элементе не будет этих элементов, то объекты намерений не пройдут через фильтр. Пример объявления действия:
Элемент определяет категорию компонента, которую должно обработать намерение. Это строковые константы, определенные в классе intent, например:
Элемент добавляет спецификацию данных к фильтру намерений. Спецификация может быть только типом данных (атрибут mimeType), URI или ТИПОМ данных вместе с URI. Значение URI определяется отдельными атрибутами для каждой из его частей, т. е. URI делитСЯ на части: android:scheme, android:host, android:port, android:path или android:pathPrefix, android:pathPattern.
Элемент определяет пару «имя-значение» для элемента дополнительных произвольных данных, которыми можно снабдить родительский компонент. Составляющий элемент может содержать любое число элементов .
Элемент — это псевдоним для Activity, определенной в атрибуте targetActivity. Целевая деятельность должна быть в том же самом приложении, что и псевдоним, и должна быть объявлена перед псевдонимом деятельности в манифесте. Псевдоним представляет целевую деятельность как независимый объект. У псевдонима может быть свой собственный набор фильтров намерений, определяющий, какие намерения могут активизировать целевую деятельность и как система будет обрабатывать эту деятельность. Например, фильтры намерений на псевдониме деятельности могут определить флаги android:name=»android.intent.action.MAIN» и android:name=»android.intent.category.LAUNCHER», заставляя целевую деятельность загружаться при запуске приложения даже в том случае, когда в фильтрах намерений на целевой деятельности эти флаги не установлены.
Элемент объявляет службу как один из компонентов приложения. Все службы должны быть представлены элементом в файле манифеста. Службы, которые не были объявлены, не будут обнаружены системой и никогда не будут запущены. Этот элемент имеет много атрибутов, определяющих имя, доступность, разрешения, процесс и т. д. Поддерживает вложенные узлы
В Android 11 появилась новая запись для работы службы в режиме Foreground (активное состояние).
Элемент объявляет приёмник широковещательных намерений как один из компонентов приложения. Приёмники широковещательных намерений дают возможность приложениям получить намерения, которые переданы системой или другими приложениями, даже когда другие компоненты приложения не работают.
Элемент объявляет контент-провайдера (источник данных) для управления доступом к базам данных. Все контент-провайдеры, которые являются частью приложения, должны быть представлены в элементах в файле манифеста. Если они не объявлены, они не будут работать, т.к. система их не сможет увидеть. Элемент содержит свой набор дочерних элементов для установления разрешений доступа к данным:
Этот элемент имеет много атрибутов, определяющих имя, доступность, разрешения, процесс и т. д.
Элемент является дочерним элементом для . Он определяет, для кого можно предоставить разрешения на подмножества данных контент-провайдера. Предоставление разрешения является способом допустить к подмножеству данных, предоставляемым контент-провайдером, клиента, у которого нет разрешения для доступа к полным данным. Если атрибут granturiPermissions контент-провайдера имеет значение true, то разрешение предоставляется для любых данных, поставляемых контент-провайдером. Однако, если атрибут поставлен в false, разрешение можно предоставить только подмножествам данных, которые определены этим элементом. Контент-провайдер может содержать любое число элементов .
Элемент — дочерний элемент для . Определяет путь и требуемые разрешения для определённого подмножества данных в пределах поставщика оперативной информации. Этот элемент может быть определён многократно, чтобы поставлять множественные пути.
Элемент определяет общедоступную библиотеку, с которой должно быть скомпоновано приложение. Этот элемент указывает системе на необходимость включения кода библиотеки в загрузчик классов для пакета приложения. Каждый проект связан по умолчанию с библиотеками Android, в которые включены основные пакеты для сборки приложений (с классами общего назначения типа Activity, Service, Intent, View, Button, Application, ContentProvider и т. д.). Однако некоторые пакеты находятся в отдельных библиотеках, которые автоматически не компонуются с приложением. Если же приложение использует пакеты из этих библиотек или других, от сторонних разработчиков, необходимо сделать явное связывание с этими библиотеками и манифест обязательно должен содержать отдельный элемент .
Как редактировать AndroidManifest.xml на php?
Друзья, помогите понять в какую сторону мне двигаться. Хочу «открывать->редактировать->сохранять» xml-файл на php. Знаю есть SimpleXML с функцией XPath. Задумка сделать тоже самое, как на сайте custom.maxthon.com/custom/index.php . То есть редактирование xml в облаке. Может есть какие-то готовые решение. Повторюсь, прошу направить что именно мне изучать. Буду благодарен за совет!
- Вопрос задан более трёх лет назад
- 543 просмотра
Манифест приложения Android
Каждый мультиплатформенный пользовательский интерфейс приложения .NET (.NET MAUI) на Android содержит xml-файл AndroidManifest.xml , расположенный в папке Platform\Android , который описывает основные сведения о приложении для создания инструментов, операционной системы Android и Google Play.
Файл манифеста для приложения .NET MAUI Android создается в рамках процесса сборки .NET MAUI в Android. Этот процесс сборки принимает XML-файл в файле Platform\Android\AndroidManifest.xml и объединяет его с любым XML-кодом, созданным из определенных атрибутов в классах. Полученный файл манифеста можно найти в папке obj . Например, его можно найти в obj\Debug\net8.0-android\AndroidManifest.xml для отладки сборки на платформе .NET 8.
Visual Studio 17.6+ включает редактор, упрощающий процесс указания сведений о приложении, целевой версии Android и необходимых разрешений в файле манифеста Android.
Создание манифеста
Все приложения .NET MAUI имеют класс, производный MainActivity от Activityкласса, через MauiAppCompatActivity класс и который применяется ActivityAttribute к нему. Некоторые приложения могут включать дополнительные классы, производные от Activity них и имеющие примененные ActivityAttribute .
Во время сборки сборки сканируются для неклассов abstract , производных от Activity и имеющих примененные ActivityAttribute . Эти классы и атрибуты используются для создания манифеста приложения. Рассмотрим следующий пример кода:
using Android.App; namespace MyMauiApp; public class MyActivity : Activity
Этот пример приводит к тому, что в файле манифеста не создается ничего. Чтобы создать элемент, необходимо добавить следующееActivityAttribute:
using Android.App; namespace MyMauiApp; [Activity] public class MyActivity : Activity
Этот пример приводит к добавлению следующего фрагмента XML в файл манифеста:
ActivityAttribute не влияет на abstract типы.
Имя действия
Имя типа действия основано на 64-разрядной циклической избыточности проверка имени экспортируемого типа. Это позволяет предоставить одно полное имя из двух разных сборок без получения ошибки упаковки.
Чтобы переопределить это значение по умолчанию и явно указать имя действия, используйте Name свойство:
using Android.App; namespace MyMauiApp; [Activity (Name="companyname.mymauiapp.activity")] public class MyActivity : Activity
В этом примере создается следующий фрагмент XML:
Свойство следует использовать Name только по причинам обратной совместимости, так как такое переименование может замедлить поиск типов во время выполнения.
Типичный сценарий настройки Name свойства — если необходимо получить доступное для чтения имя Java для действия. Это может быть полезно, если другое приложение Android должно быть в состоянии открыть приложение или если у вас есть скрипт для запуска приложения и тестирования времени запуска.
Запуск из бирающего приложения
Если приложение .NET MAUI Android содержит несколько действий, и необходимо указать, какое действие должно быть запущено из средства запуска приложений, используйте MainLauncher это свойство:
using Android.App; namespace MyMauiApp; [Activity (Label="My Maui App", MainLauncher = true)] public class MyActivity : Activity
В этом примере создается следующий фрагмент XML:
Разрешения
При добавлении разрешений в приложение Android они записываются в файл манифеста. Например, если задать ACCESS_NETWORK_STATE разрешение, в файл манифеста добавляется следующий элемент:
Шаблон проекта приложения .NET MAUI задает INTERNET и разрешения в Platform\Android\AndroidManifest.xml, так как для большинства приложений требуется доступ ACCESS_NETWORK_STATE к Интернету. Если удалить INTERNET разрешение из манифеста, сборки отладки по-прежнему будут включать разрешение в созданный файл манифеста.
Если вы обнаружите, что переключение на сборку выпуска приводит к потере приложения разрешения, доступного в сборке отладки, убедитесь, что вы явно установили требуемое разрешение в файле манифеста.
Действия и функции намерения
Файл манифеста Android предоставляет способ описания возможностей приложения. Это достигается с помощью намерений и IntentFilterAttribute. Вы можете указать, какие действия подходят для действия с конструктором IntentFilterAttribute и какие категории соответствуют свойству Categories . Необходимо предоставить по крайней мере одно действие, поэтому действия предоставляются в конструкторе. Можно [IntentFilter] указать несколько раз, и каждое использование приводит к отдельному элементу в пределах :
using Android.App; using Android.Content; namespace MyMauiApp; [Activity(Label = "My Maui App", MainLauncher = true)] [IntentFilter(new[] , Categories = new[] )] public class MyActivity : Activity
В этом примере создается следующий фрагмент XML:
Элемент Application
Файл манифеста Android также предоставляет способ объявления свойств для всего приложения. Это достигается с помощью элемента и его аналога ApplicationAttribute. Как правило, вы объявляете свойства для всего приложения, а затем переопределяете эти свойства по мере необходимости на основе действия.
Например, в файл MainApplication.cs можно добавить следующий Application атрибут, чтобы указать, что имя приложения, доступное для чтения, — «My Maui App», и что он использует Maui.SplashTheme стиль в качестве темы по умолчанию для всех действий:
using Android.App; using Android.Runtime; namespace MyMauiApp; [Application(Label = "My Maui App", Theme = "@style/Maui.SplashTheme")] public class MainApplication : MauiApplication < public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership) < >protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); >
Это объявление приводит к созданию следующего фрагмента XML в obj\Debug\net8.0-android\AndroidManifest.xml:
Отладка сборок автоматически устанавливается android:debuggable=»true» таким образом, чтобы отладчики и другие средства могли подключаться к приложению. Однако он не установлен для сборок выпуска.
В этом примере все действия в приложении будут по умолчанию использовать стиль Maui.SplashTheme . Если вы задали тему действия Maui.MyTheme , то только это действие будет использовать Maui.MyTheme стиль, а любые другие действия в приложении по умолчанию Maui.SplashTheme будут использоваться в стиле, заданном в элементе .
Это ApplicationAttribute не единственный способ настройки атрибутов. Вы также можете вставить свойства непосредственно в элемент файла манифеста. Затем эти свойства объединяются в созданный файл манифеста. Дополнительные сведения см. в разделе ApplicationAttributeсвойств .
Содержимое Platform\Android\AndroidManifest.xml всегда переопределяет данные, предоставляемые атрибутами.
Заголовок окна приложения
В приложении Android есть строка заголовка, отображающая метку. Значение свойства сборки $(ApplicationTitle) в файле проекта приложения .NET MAUI отображается в строке заголовка. .NET MAUI включает его в созданный манифест в качестве значения android.label :
Чтобы указать метку действий в строке заголовка Label , используйте свойство:
using Android.App; namespace MyMauiApp; [Activity (Label="My Maui App")] public class MyActivity : Activity
В этом примере создается следующий фрагмент XML:
Значок приложения
По умолчанию вашему приложению будет предоставлен значок .NET. Сведения об указании пользовательского значка см. в разделе «Изменение значка приложения .NET MAUI».
Атрибуты
В следующей таблице показаны атрибуты .NET Android, которые создают фрагменты XML манифеста Android:
| Атрибут | Description |
|---|---|
| Android.App.ActivityAttribute | Создает фрагмент XML действия. |
| Android.App.ApplicationAttribute | Создает фрагмент XML приложения. |
| Android.App.InstrumentationAttribute | Создает фрагмент XML инструментирования. |
| Android.App.IntentFilterAttribute | Создает фрагмент XML-фильтра намерений. |
| Android.App.MetaDataAttribute | Создает фрагмент XML метаданных. |
| Android.App.PermissionAttribute | Создает фрагмент XML разрешения. |
| Android.App.PermissionGroupAttribute | Создает фрагмент XML группы разрешений. |
| Android.App.PermissionTreeAttribute | Создает фрагмент XML дерева разрешений. |
| Android.App.ServiceAttribute | Создает фрагмент XML службы. |
| Android.App.UsesLibraryAttribute | Создает фрагмент XML-кода библиотеки, использующего библиотеку . |
| Android.App.UsesPermissionAttribute | Создает фрагмент XML-кода с использованием разрешений. |
| Android.Content.BroadcastReceiverAttribute | Создает фрагмент XML приемника . |
| Android.Content.ContentProviderAttribute | Создает фрагмент XML поставщика. |
| Android.Content.GrantUriPermissionAttribute | Создает xml-фрагмент XML разрешения grant-uri. |
См. также
- Обзор манифеста приложения на developer.android.com
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.