что такое манифест приложения
Манифест приложения
Каждый проект в Android имеет файл манифеста, называемый AndroidManifest.xml, который хранится в корневом каталоге. Файл манифеста является важной частью нашего приложения, поскольку он определяет структуру и метаданные приложения. В частности, манифест приложения выполняет следующие задачи:
Файл манифеста также указывает метаданные приложения, которые включают в себя иконку, номер версии, темы и так далее.
Манифест приложения содержит корневой элемент с именем пакета, заданным в атрибуте package. Он также должен включать атрибут xmls:android, который будет предоставлять несколько системных атрибутов, используемых в файле.
В можно добавить атрибут android:versionCode, который используется для определения текущей версии приложения в виде целого числа, которое увеличивается с каждым обновлением. Также атрибут android:versionName используется для указания публичной версии, которая показывается пользователям.
Также можно указать, куда должно устанавливаться приложение: на SD-карту или внутреннюю память, используя атрибут android:installLocation.
Oбщая структура файла манифеста выглядит следующим образом:
Кратко рассмотрим каждый из этих элементов.
Элемент
Этот элемент позволяет запрашивать у системы разрешения, которые нужны приложению для доступа к различным функциям. Это делается с помощью единственного атрибута android:name, в параметры которого нужно передать имя разрешения. Например, для получения доступа к Интернету нужно добавить следующее разрешение:
Элемент
Объявляет разрешение, которое может использоваться для ограничения доступа к определенным компонентам или функциям этого или других приложений.
Элемент
Этот элемент объявляет базовое имя дерева разрешений. Приложение получает права собственности на все разрешения в дереве. Оно может динамически добавлять новые разрешения для дерева, вызывая PackageManager.addPermission(). Имена внутри дерева разделяются точками. Например, если имя дерева задано как ru.androidtools.project, то для него можно добавить следующие разрешения:
Обратите внимание, что этот элемент не объявляет сами разрешения, а только пространство имен, в котором эти разрешения будут размещены.
Элемент
Объявляет имя группы для набора разрешений. Отдельные разрешения присоединяются к группе через атрибут android:permissionGroup элемента
Обратите внимание, что этот элемент не объявляет само разрешение, а только категорию, в которую разрешения будут помещены.
Зачем Win32-приложению манифест?
Недавно на руборде в разделе Программирование был задан вопрос: «Зачем Win32-приложению манифест? На что он влияет?». Первое, что сразу приходит в голову большинству программистов — это темы оформления. Но на самом деле в современных виндах манифест нужен не только для этого. Я подумал и написал пять ключевых аспектов, на которые влияет манифест или его отсутствие. После этого сразу несколько человек попросили оформить этот пост в виде более развернутой статьи.
Для начала предлагаю вспомнить, как вообще в Windows появились манифесты, и как они развивались.
История манифеста
В древние времена в мире Win95/98 царил ад, точнее DLL hell. Возник он из-за того, что Windows задумывалась как идеальная система. Все приложения в ней всегда должны были писаться с использованием самых свежих версий системных библиотек. А различные версии самих библиотек должны были быть взаимозаменяемыми. Реальность быстро доказала всем, что для популярной операционки это несбыточная мечта, так и возник ад. Каждое второе приложение во время инсталляции перезаписывало системные библиотеки нужными ему версиями. В результате после установки приложения X установленное ранее приложение Y начинало глючить. А после переустановки приложения Y глючить начинало приложение X. В общем юзерам жилось весело.
Всем был хорош SxS кроме одного — он был ужасно неудобен для программиста. В 99% случаев манифест применялся только для включения тех самых тем оформления, и ни для чего больше. Разработчикам винды стало ясно, что нужен новый, более простой в использовании способ указать поддерживаемые версии системных библиотек. Тогда они придумали простое правило: в пределах одной версии системы интерфейс и поведение этих библиотек не изменяется. Нужно было только каким то образом научится определять какая их версия требуется конкретному приложению. Так в Windows 7 в манифесте появилась секция Compatibility, где можно указать с какими версиями ОС тестировалось приложение.
Также в манифесте начиная с Windows Vista появилось еще несколько секций, обо всех о них ниже.
Функции манифеста
Справа тоже самое приложение без манифеста:
Запрос разрешения пользователя:
Виртуализация файловой системы в деле:
Разработчики Висты не стерпели подобного безобразия, и заложили в DWM возможность производить масштабирование самостоятельно, а приложениям врать, что DPI по прежнему равен 96. Причем зависящие от него системные настройки, разрешение монитора и даже положение мыши, также пересчитываются. К сожалению разработчики Висты небыли волшебниками, поэтому масштабирование DWM производит с помощью простых алгоритмов растягивания изображений. И если интерфейс приложения нужно увеличить, то происходит замыливание картинки. Представьте что было бы, если бы разработчики Фотошопа не могли это отключить. Таких бунтов на корабле никто не хотел, поэтому появилась возможность указать в манифесте, что ваше приложение таки умеет нормально масштабировать свой интерфейс, и помощь DWM ему не нужна. За это отвечает параметр dpiAware. Тут правда следует отметить, что по умолчанию масштабирование силами DWM включается при увеличении 150% и выше. Видимо в Microsoft посчитали, что при масштабировании 125% артефакты как на скриншоте выше вполне терпимы.
Слева масштабирование силами DWM, а справа — самого приложения:
В Windows 8.1 появилась возможность указывать разный масштаб разным мониторам, если подключено сразу несколько. Соответственно у ключа dpiAware появилось новое значение «True/PM». Оно означает, что приложение умеет динамически изменять масштаб своего интерфейса при переносе окон с одного монитора на другой.
Наиболее интересен вопрос: «На что влияют эти GUID-ы?» Пока что список различий в поведении системных библиотек невелик. Наиболее интересно упоминание об оптимизации RPC. Получается что приложения, задекларировавшие совместимость с семеркой, будут работать быстрее.
В будущем этот раздел манифеста наверняка будет играть большую роль чем сейчас. Ведь в винде полно разных хаков призванных обеспечивать совместимость. И теперь есть возможность оградить от них нормальные приложения.
Если GUID-ы полностью отсутствуют в манифесте, то к приложению применяются правила как к совместимому с Вистой:
MNFST в Инстаграм: что это такое и отзывы
16.12.2019 6,017 Просмотры
«MNFST» (Манифест) – приложение на базе Android и IOS для монетизации аккаунта в соцсетях. То есть, в нем можно заработать, выложив пост. Такой шанс представляется каждому человеку, что, по мнению разработчиков, делает мир честнее.
С помощью «MNFST» пользователь может продвигать симпатизируемые бренды. Еще одна из задач приложения — привлечение интереса к острым проблемам человечества. Затрагивается тематика здорового образа жизни, умеренного потребления, заботливого отношения к природе и окружающей среде, а также многие другие.
Что нужно сделать, чтобы начать пользоваться «MNFST»:
Чем больше постов и подписчиков, тем больше будет и заданий.
Здесь работает реферальная программа. Для участия в ней:
Друзей можно приглашать неограниченное количество, однако, следует помнить, что все ваше вознаграждение не сможет превысить 15000 рублей.
Что потребуется сделать другу:
Сумма вознаграждения может меняться в зависимости от социального рейтинга и страны проживания друга. Доступные страны: Россия, Польша и Великобритания.
Рейтинг приложения весьма высок – 4,6 в App Store и 4,0 в Google Play.
Пользователи, оценившие плюсы «MNFST», пишут:
Из недостатков отмечают:
Манифест приложения
Основное содержимое манифеста:
Основные правила манифеста:
Структура файла
Ниже представлена структура манифеста со всеми возможными элементами. А далее рассмотрим каждый элемент отдельно. Для быстрого перехода к интересующему элементу кликайте по содержанию справа.
Пространство имен Android, оно всегда одно и то же.
Корневой элемент манифеста. Является обязательным.
Разрешения, которые должны быть запрошены при установке приложения для его нормального функционирования.
Атрибуты:
Разрешения, которые должны запросить другие приложения для получения доступа к вашему приложению. Можно использовать существующие, либо создать собственные.
Атрибуты:
Элемент позволяет приложению объявлять пространство имён разрешений, в которое оно может динамически во время выполнения добавлять новые разрешения.
Атрибуты:
Объявляет имя категории, в которую можно сгруппировать все логически связанные разрешения. Добавить разрешение в группу можно с помощью атрибута permissionGroup элемента
. Разрешения из одной группы в пользовательском интерфейсе отображаются вместе.
Атрибуты:
Объявляет класс Instrumentation, который дает возможность отслеживать все взаимодействия, которые система выполняет с приложением. Обычно используется при отладке и тестировании приложения и удаляется из release-версии приложения.
Атрибуты:
Совместимость приложения с указанной версией Android. Когда приложение будет устанавливаться, система сравнит указанный уровень API с API устройства. Также Google Play использует этот элемент, чтобы отфильтровывать устройства, которые не соответствуют указанному уровню API.
Атрибуты:
Требуемая для приложения аппаратная и программная конфигурация устройства. Например, можно указать, что для работы приложения требуется физическая клавиатура. Таким образом можно избежать ситуаций, когда приложение будет установлено на устройство, где оно не сможет работать. Как правильно без этого элемента можно обойтись и его даже не рекомендуют использовать, потому что приложение должно стремится к универсальности и совместимости на большинстве устройствах, а некоторые ограничения можно указать с помощью других атрибутов (менее жестких в плане ограничения устройств).
Атрибуты:
Объявляет одну или несколько аппаратных или программных функций, требуемых для работы приложения.
Атрибуты:
Позволяет указать размеры экрана, которые поддерживаются приложением. Если размер экрана будет больше, чем поддерживается приложением, то включится режим совместимости, что не очень хорошо, так как этот режим может вызвать размытие интерфейса из-за неправильного масштабирования. Поэтому рекомендуется создавать свои макеты под каждый размер экрана. Кроме того, с помощью отдельного макета можно оптимизировать интерфейс, например, чтобы на экране отображалось два окна (двупанельный интерфейс). Как поддерживать разные размеры экранов описано документации здесь.
Атрибуты:
Данные атрибуты были добавлены в API 13 (Android 3.2):
Позволяет задать все возможные размеры экранов, с которыми совместимо приложение. Данный элемент может быть указан в манифесте только один раз, зато внутри него можно добавлять тег с указанием поддерживаемого размера экрана.
Этот элемент носит исключительно информационный характер. С помощью него Google Play фильтрует устройства с неподдерживаемыми экранами.
Конфигурация экрана, которая не указана в этом элементе, считается неподдерживаемой приложением.
Определяет формат сжатия текстур GL. Элемент является информационным, т.е. необходим Google Play для фильтрации устройств, которые не поддерживают заданные параметры.
Дочерние элементы:
Атрибуты:
Дочерние элементы:
Атрибуты:
Когда мы разрабатываем приложение, то периодически можем менять названия классов, изменять activity, которая будет запускаться первой итд. И вроде ничего в этом страшного нет, но пользователя может смутить, например, исчезновения иконки приложения с главного экрана (потому что мы ранее изменили имя стартовой activity). Чтобы этого избежать используется данный элемент. Т.е. мы можем стартовой activity присвоить псевдоним и при запуске приложения система будет осуществлять поиск этой activity именно по псевдониму, а не по имени класса, который ее реализует. И если мы назначим стартовой другую activity, то пользователь уже не потеряет иконку на главном экране, так как псевдоним остался без изменений.
На эту тему есть интересная статья.
Дочерние элементы:
Атрибуты:
Данный элемент позволяет записать какие-либо данные по типу “ключ-значение”. Доступ к этим данным можно получить из всего приложения (если объявлены в внутри тега ), либо можно передать необходимые для работы данные конкретной activity (объявляется внутри тега ).
Например, в приложении используются уникальные шрифты. Чтобы избежать задержек при запуске приложения, хотелось бы загружать их предварительно. Для этого создается файл в ресурсах, в котором перечисляются эти шрифты:
Манифесты приложений
Манифест приложения — это файл XML, который описывает и определяет общие и закрытые сборки одновременного выполнения, которые приложению следует подключить во время выполнения. Это должны быть те же версии сборок, что и использованные для проверки приложения. Манифесты приложения также могут описывать метаданные закрытых для приложения файлов.
Полный список схем XML см. в разделе Схема файла манифеста.
Манифесты приложений имеют следующие элементы и атрибуты.
Элемент | Атрибуты | Обязательно |
---|---|---|
сборок | Да | |
манифестверсион | Да | |
не наследовать | Нет | |
Неправильн | Да | |
type | Да | |
name | Да | |
language | Нет | |
processorArchitecture | Нет | |
version | Да | |
publicKeyToken | Нет | |
см | Нет | |
приложение | Нет | |
суппортедос | Id | Нет |
maxversiontested укажите установленную | Id | Нет |
зависимостей | Нет | |
dependentAssembly | Нет | |
файл | Нет | |
name | Нет | |
hashAlg | Нет | |
hash | Нет | |
активекодепаже | Нет | |
автоповышение | Нет | |
дисаблесеминг | Нет | |
дисаблевиндовфилтеринг | Нет | |
дпиаваре | Нет | |
дпиаваренесс | Нет | |
гдискалинг | Нет | |
хигхресолутионскроллингаваре | Нет | |
лонгпасаваре | Нет | |
принтердриверисолатион | Нет | |
ултрахигхресолутионскроллингаваре | Нет | |
msix | Нет | |
хеаптипе | Нет |
Расположение файла
Манифесты приложений должны быть добавлены в качестве ресурсов в EXE-файл или библиотеку DLL приложения.
Дополнительные сведения см. в разделе Установка параллельных сборок.
Синтаксис имени файла
Имя файла манифеста приложения — это имя исполняемого объекта приложения, за которым следует manifest.
Элементы
В именах элементов и атрибутов учитывается регистр. Значения элементов и атрибутов не учитывают регистр, за исключением значения атрибута Type.
сборка
Элемент Assembly должен находиться в пространстве имен urn: schemas-microsoft-com: ASM. v1. Дочерние элементы сборки также должны находиться в этом пространстве имен путем наследования или добавления тегов.
Элемент Assembly имеет следующие атрибуты.
attribute | Описание |
---|---|
манифестверсион | Атрибут манифестверсион должен иметь значение 1,0. |
не наследовать
Элемент NoInherit является необязательным и обычно опускается. Большинство сборок работает неправильно с помощью контекста активации без наследования, так как сборка должна быть специально разработана для управления распространением собственного контекста активации. Использование элемента NoInherit требует, чтобы все зависимые сборки, на которые ссылается манифест приложения, имели элемент NoInherit в манифесте сборки.
assemblyIdentity
Элемент assemblyIdentity имеет следующие атрибуты. У него нет вложенных элементов.
совместимость
Содержит по крайней мере одно приложение. У него нет атрибутов. Необязательный элемент. манифесты приложений без элемента compatibility по умолчанию Windows совместимость с Vista на Windows 7.
application
суппортедос
Элемент суппортедос имеет следующий атрибут. У него нет вложенных элементов.
attribute | Описание |
---|---|
Id | Задайте для атрибута ID значение , чтобы запустить приложение с помощью функции Vista. это может позволить приложению, предназначенному для Windows Vista, работать в более поздней версии операционной системы. задайте для атрибута Id значение , чтобы запустить приложение с помощью функции Windows 7. приложения, поддерживающие Windows Vista, Windows 7 и функции Windows 8, не нуждаются в отдельных манифестах. в этом случае добавьте идентификаторы guid для всех операционных систем Windows. сведения о поведении атрибута Id в Windows см. в разделе Windows 8 и Windows Server 2012 Compatibility Cookbook. Следующие идентификаторы GUID соответствуют указанным операционным системам: — > Windows 10, Windows 11, Windows Server 2016, Windows server 2019 и Windows server 2022 — > Windows 8.1 и Windows Server 2012 R2 — > Windows 8 и Windows Server 2012 — > Windows 7 и Windows Server 2008 R2 — > Windows Vista и Windows Server 2008 вы можете протестировать это на Windows 7 или Windows 8. x, запустив монитор ресурсов (ресмон), перейдя на вкладку цп, щелкнув правой кнопкой мыши метки столбцов, «выбрать столбец. » и установив флажок «контекст операционной системы». на Windows 8. x можно также найти этот столбец, доступный в диспетчере задач (панели диспетчер задач). содержимое столбца показывает наибольшее найденное значение или «Windows Vista» в качестве значения по умолчанию. |
maxversiontested укажите установленную
элемент maxversiontested укажите установленную указывает версии Windows, на которые проверялось приложение, начиная с минимальной версии ос, поддерживаемой приложением до максимальной версии. Полный набор версий можно найти здесь. Он предназначен для использования в приложениях для настольных систем, использующих острова XAML и не развернутых в пакете MSIX. этот элемент поддерживается в Windows 10, версии 1903 и более поздних версиях.
Элемент maxversiontested укажите установленную имеет следующий атрибут. У него нет вложенных элементов.
attribute | Описание |
---|---|
Id | задайте для атрибута Id строку версии из 4 частей, которая указывает максимальную версию Windows, с которой было протестировано приложение. Например, «10.0.18226.0». |
dependency
Содержит по меньшей мере один dependentAssembly. У него нет атрибутов. Необязательный элемент.
dependentAssembly
Указывает файлы, являющиеся частными для приложения. Необязательный элемент.
Элемент File содержит атрибуты, приведенные в следующей таблице.
attribute | Описание |
---|---|
name | Имя файла. Например, Comctl32.dll. |
hashAlg | Алгоритм, используемый для создания хэша файла. Это значение должно быть SHA1. |
hash | Хэш файла, на который ссылается имя. Шестнадцатеричная строка длины в зависимости от хэш-алгоритма. |
активекодепаже
в Windows 10 этот элемент заставляет процесс использовать UTF-8 в качестве кодовой страницы процесса. Дополнительные сведения см. в разделе Использование кодовой страницы UTF-8. в Windows 10 единственным допустимым значением для активекодепаже является UTF-8.
начиная с Windows 11, этот элемент также позволяет выбрать устаревшую кодовую страницу не в кодировке UTF-8 или кодовые страницы для определенного языкового стандарта для совместимости с устаревшими приложениями. Современные приложения настоятельно рекомендуется использовать Юникод. в Windows 11 для активекодепаже также может быть задано значение Legacy или имя локали, например en-US или ja-JP.
этот элемент впервые был добавлен в Windows 10 версии 1903 (обновление 2019 мая). вы можете объявить это свойство и целевой объект или выполнить его в более ранних Windows сборках, но необходимо как обычно выполнять обнаружение и преобразование кодовых страниц прежних версий. Этот элемент не содержит атрибуты.
В следующем примере показано, как использовать этот элемент, чтобы заставить текущий процесс использовать UTF-8 в качестве кодовой страницы процесса.
автоповышение
Указывает, включен ли автоматический повышенный уровень прав. Значение true указывает, что он включен. У него нет атрибутов.
дисаблесеминг
Указывает, отключено ли предоставление элементов пользовательского интерфейса для темы. Значение true указывает, что отключено. У него нет атрибутов.
дисаблевиндовфилтеринг
Указывает, следует ли отключить фильтрацию окон. True — отключить фильтрацию окон, чтобы можно было перечислить иммерсивное окно с рабочего стола. дисаблевиндовфилтеринг был добавлен в Windows 8 и не имеет атрибутов.
дпиаваре
Указывает, учитывается ли текущий процесс в точках на дюйм (DPI).
В следующей таблице описывается поведение, получаемое в зависимости от наличия элемента дпиаваре и содержащегося в нем текста. В тексте элемента не учитывается регистр.
Дополнительные сведения о параметрах осведомленности о dpi см. в разделе Сравнение уровней осведомленности о dpi.
дпиаваре не имеет атрибутов.
дпиаваренесс
Указывает, учитывается ли текущий процесс в точках на дюйм (DPI).
Элемент дпиаваренесс может содержать один элемент или список элементов с разделителями-запятыми. В последнем случае используется первый (крайний левый) элемент в списке, распознанном операционной системой. таким образом можно указать различные варианты поведения, поддерживаемые в будущих Windows версиях операционных систем.
В следующей таблице описывается поведение, получаемое в зависимости от наличия элемента дпиаваренесс и содержащегося в нем текста в его левом распознанном элементе. В тексте элемента не учитывается регистр.
Дополнительные сведения о параметрах осведомленности о разрешении, поддерживаемых этим элементом, см. в разделе _ Поддержка dpi и _ _ контекст осведомленностио dpi.
дпиаваренесс не имеет атрибутов.
гдискалинг
Платформа GDI (интерфейс графических устройств) может применять масштабирование DPI к примитивам и тексту на уровне отдельных мониторов без обновления самого приложения. Это может быть полезно для приложений GDI, которые больше не обновляются.
Невекторная графика (например, точечные рисунки, значки или панели инструментов) не может масштабироваться этим элементом. Кроме того, графика и текст, отображаемые в растровых изображениях, динамически создаваемые приложениями, также не могут масштабироваться этим элементом.
Значение true указывает, что этот элемент включен. У него нет атрибутов.
хигхресолутионскроллингаваре
Указывает, включено ли разрешение на прокрутку с высоким разрешением. Значение true указывает, что он включен. У него нет атрибутов.
лонгпасаваре
принтердриверисолатион
Указывает, включена ли изоляция драйвера принтера. Значение true указывает, что он включен. У него нет атрибутов. изоляция драйвера принтера повышает надежность службы Windows печати, позволяя драйверам принтера выполняться в процессах, отделяющих от процесса, в котором работает диспетчер очереди печати. поддержка изоляции драйвера принтера запущена в Windows 7 и Windows Server 2008 R2. Приложение может объявить изоляцию драйвера принтера в своем манифесте приложения, чтобы изолировать себя от драйвера принтера и повысить его надежность. Это значит, что приложение не будет завершаться сбоем, если в драйвере принтера произошла ошибка.
ултрахигхресолутионскроллингаваре
Указывает, включено ли разрешение на прокрутку Ultra-High-resolution. Значение true указывает, что он включен. У него нет атрибутов.
Указывает сведения об удостоверении разреженного пакета MSIX для текущего приложения. этот элемент поддерживается в Windows 10, версии 2004 и более поздних версиях.
attribute | Описание |
---|---|
publisher | Описание сведений об издателе. это значение должно соответствовать атрибуту Publisher в элементе Identity манифеста разреженного пакета. |
PackageName | Описывает содержимое пакета. Это значение должно соответствовать атрибуту Name в элементе Identity манифеста разреженного пакета. |
applicationId | Уникальный идентификатор приложения. Это значение должно соответствовать атрибуту ID в элементе Application в манифесте разреженного пакета. |