Манифест приложения

Манифест приложения описывает ресурсы, также называемые возможностями приложения, которые требуется приложению. У каждого приложения имеется манифест приложения.

Приложения должны согласиться использовать возможности, указав необходимые ресурсы в разделе Capabilities (возможности) манифеста приложения. Никакие возможности не включены по умолчанию. Если приложение запрашивает возможность, которая отсутствует в списке, запрос отклоняется. Если файл манифеста приложения содержит ошибки, попытки загрузки неопубликованного приложения завершаются сбоем. Манифест каждого приложения должен быть сохранен как файл app_manifest.json в корневом каталоге папки приложения на компьютере.

Шаблоны Azure Sphere автоматически создают манифест приложения по умолчанию при создании приложения. Необходимо изменить манифест по умолчанию, чтобы указать список возможностей, которые требуются вашему приложению. Каждый пример Azure Sphere также содержит манифест приложения. Если приложение основано на примере, вам, вероятно, потребуется изменить манифест.

Различные устройства Azure Sphere могут предоставлять функции микросхемы различными способами. Таким образом, значение, используемое в манифесте для обнаружения определенной функции, например вывод GPIO, может различаться в зависимости от оборудования, для которого выполняется разработка. Управление зависимостями целевого оборудования предоставляет дополнительные сведения о целевых объектах оборудования для высокоуровневого приложения. В манифесте приложения высокого уровня используйте константы, определенные в JSON-файле в папке HardwareDefinitions каталога установки пакета SDK Microsoft Azure Sphere. Точное расположение каталога установки будет отличаться в Windows и Linux. В приложении, поддерживающем режим реального времени (RTApp), используйте необработанные значения, перечисленные в разделе Содержимое манифеста приложения.

Когда приложение загружается без публикации или разворачивается на устройстве, среда выполнения Azure Sphere считывает манифест приложения, чтобы выяснить, какие возможности приложению разрешено использовать. Попытки получить доступ к ресурсам, которые не перечислены в манифесте, приведут к ошибкам API, например EPERM (отказ в доступе). Только одно приложение на устройстве может использовать ресурс. Если установить приложение, которое запрашивает уже используемый ресурс, попытка завершится сбоем.

Содержимое манифеста приложения

Манифест приложения содержит следующие элементы.

Имя Описание
SchemaVersion Версия используемой схемы манифеста приложения. В настоящее время этот элемент должен иметь значение 1. Обязательный.
Имя Имя приложения. При создании проекта этому значению будет присвоено имя проекта. Имя может быть любой длиной, но в пакете изображения хранятся только первые 31 символов; Таким образом, имя отображается усеченным в запросах о пакете изображений. Обязательный.
ComponentId Идентификатор компонента. Visual Studio создает этот идентификатор при сборке приложения. Если вы не используете Visual Studio, см. раздел "Создание идентификатора компонента" для получения сведений о создании идентификатора. Обязательный.
EntryPoint Имя исполняемого файла с относительным путем в образе файловой системы приложения, который создается при сборке приложения. В настоящее время Visual Studio использует значение "/bin/app" для этого элемента. Обязательный.
CmdArgs Аргументы, которые будут переданы в приложение при запуске. Заключите каждый аргумент в двойные кавычки и разделите аргументы запятыми. Необязательно.
TargetBetaApis Указывает, что приложению требуются API-интерфейсы в бета-версии, и определяет набор используемых API в бета-версии. Это поле автоматически добавляется в процессе сборки, если в приложении используются API-интерфейсы в бета-версии. Необязательно. Дополнительные сведения см. в разделе об использовании функций в бета-версии.
ApplicationType Тип приложения. Необязательно. Укажите значение "Debugger" только в том случае, если вы создаете замену gdbserver.
Capabilities Список пар "ключ-значение", задающий требования приложения к ресурсам. Обязательный.
MallocVersion Целое число, указывающее версию malloc, где 1=standard и 2=mallocng, расширенный malloc доступен в версиях MUSL больше 1.2.1. Для всех новых приложений рекомендуется использовать версию 2.

Раздел Capabilities поддерживает следующие элементы.

Примечание.

Высокоуровневые приложения могут использовать значения возможностей из файлов определения оборудования или необработанные значения. Но вы не можете одновременно использовать оба типа значений в одной и той же возможности. RTApps может использовать только необработанные значения для возможностей.

Имя Описание
Adc Контроллер преобразования аналоговых и цифровых данных (ADC), используемый приложением. Эта возможность резервирует весь контроллер АЦП (который состоит из 8-контактного блока), а не только контакт 0 в блоке.
В высокоуровневом приложении укажите имя периферийного устройства, которое объявлено в файле заголовка определения оборудования.
В приложении RTApp укажите параметр AppManifestValue, объявленный в JSON-файле определения оборудования.
Пример определения оборудования: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Пример необработанного значения: "Adc": [ "ADC-CONTROLLER-0" ]
Справочник по API: Applibs adc.h
Концептуальное руководство. Использование ADC в Azure Sphere
AllowedApplicationConnections Список идентификаторов компонентов приложения, к которым может подключаться приложение.
Пример: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Справочник по API: Applibs application.h
Концептуальное руководство. Взаимодействие с высокоуровневыми приложениями
AllowedConnections Список DNS-имен узлов или IP-адресов (IPv4-адресов), к которым может подключаться приложение. Если приложение использует Центр Интернета вещей Azure, список должен содержать IP-адрес или DNS-имя узла этого центра. Обычно это имя_центра.azure-devices.net. Номера портов и подстановочные знаки в именах и IP-адресах не принимаются.
Пример: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Список портов, на которых разрешен входящий трафик TCP. Можно добавить до 10 портов, при этом каждый порт указывается отдельно. Поддерживаются порты с 1024 по 65535. Можно указать одинаковые порты для TCP и UDP. Но если для нескольких приложений на устройстве указан один порт, второе приложение не удастся загрузить для запуска.
Пример: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Список портов, на которых разрешен входящий трафик UDP. Можно добавить до 10 портов, при этом каждый порт указывается отдельно. Поддерживаются порты с 1024 по 65535. Можно указать одинаковые порты для TCP и UDP. Но если для нескольких приложений на устройстве указан один порт, второе приложение не удастся загрузить для запуска.
Пример: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Логическое значение, указывающее, имеет ли высокоуровневое приложение разрешение на управление сертификатами с помощью API CertStore: true, чтобы включить API; в противном случае значение false.
Пример: "CertStore" : true
DeviceAuthentication Строка, указывающая идентификатор UUID клиента Azure Sphere (устаревшая версия), который будет использоваться для проверки подлинности устройства.
Пример: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Логическое значение, указывающее, имеет ли приложение разрешение на настройку службы DHCP: true, если у приложения есть возможность; в противном случае значение false.
Пример: "DhcpService" : true
Справочник по API: Applibs networking.h
Концептуальное руководство. Использование сетевых служб
EnterpriseWifiConfig Логическое значение, указывающее, имеет ли высокоуровневое приложение разрешение на создание сети EAP-TLS и связывание сертификатов с ним: true, если у приложения есть возможность; в противном случае значение false.
Пример: "EnterpriseWifiConfig" : true
ExternalInterrupt Список внешних прерываний, которые использует RTApp. Эта возможность недоступна для высокоуровневых приложений.
Пример: "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Список GPIO, используемых приложением.
В высокоуровневом приложении укажите имя GPIO, которое объявлено в файле заголовка определения оборудования, например $MT3620_RDB_LED1_RED.
В RTApp укажите целые числа, соответствующие номерам GPIO в файле JSON определения оборудования. Например, 8 означает GPIO 8.
Пример определения оборудования: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Пример необработанного значения: "Gpio": [ 8, 12 ]
Справочник по API: Applibs gpio.h
Концептуальное руководство. Использование GPIOs в Azure Sphere
HardwareAddressConfig Логическое значение, указывающее, имеет ли приложение разрешение на настройку аппаратного адреса сетевого интерфейса: true, если у приложения есть возможность; в противном случае значение false.
Пример:"HardwareAddressConfig" : true
Справочник по API: Applibs networking.h
Концептуальное руководство. Использование сетевых служб
HeapMemStats Логическое значение, указывающее, включена ли отслеживание выделения памяти кучи: true, если у приложения есть возможность; в противном случае значение false.
Пример: "HeapMemStats": true
Концептуальное:использование памяти в высокоуровневых приложениях
I2cMaster Список главных интерфейсов I2C, которые используются приложением.
В высокоуровневом приложении укажите имя периферийного устройства, которое объявлено в файле заголовка определения оборудования.
В RTApp укажите AppManifestValue, объявленное в JSON-файле определения оборудования.
Пример определения оборудования: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Пример необработанного значения: "I2cMaster": [ "ISU0", "ISU1" ]
Справочник по API: Applibs i2c.h
Концептуальное руководство. Использование I2C с Azure Sphere
I2sSubordinate Подчиненный интерфейс Inter-IC Sound (I2S), используемый RTApp. Эта возможность недоступна для высокоуровневых приложений. Пример необработанного значения: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Параметры изменяемого хранилища, позволяющие приложению использовать постоянное хранилище.
Пример: "MutableStorage" : { "SizeKB": 64, }
Справочник по API: Applibs storage.h
Концептуальное руководство. Использование хранилища в Azure Sphere
NetworkConfig Логическое значение, указывающее, имеет ли приложение разрешение на настройку сетевого интерфейса: true, если у приложения есть возможность; в противном случае значение false.
Пример: "NetworkConfig" : true
Справочник по API: Applibs networking.h
Концептуальное руководство. Использование сетевых служб
PowerControls Массив строк, представляющих детальные возможности по управлению состоянием электропитания устройства. Поддерживаются только значения ForcePowerDown и ForceReboot.
Предупреждение. Так как ForcePowerDown и ForceReboot позволяют приложению немедленно завершать все приложения, необходимо убедиться, что устройство по-прежнему может получать обновления операционной системы и приложений. Дополнительные сведения и рекомендации см. здесь.
Пример: "PowerControls": ["ForcePowerDown", "ForceReboot"]
Справочник по API: Applibs powermanagement.h
Концептуальное руководство. Управление состоянием выключения питания для устройств Azure Sphere
ШИМ Модуль модуля ширины пульса (PWM), используемый приложением.
В высокоуровневом приложении укажите имя периферийного устройства, которое объявлено в файле заголовка определения оборудования.
В RTApp укажите AppManifestValue, объявленное в JSON-файле определения оборудования.
Пример определения оборудования: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Пример необработанного значения: "Pwm": [ "PWM-CONTROLLER-0" ]
Справочник по API: Applibs pwm.h
Концептуальное руководство. Использование PWM в высокоуровневых приложениях
ReadNetworkProxyConfig Логическое значение, указывающее, имеет ли приложение разрешение на получение конфигурации прокси-сервера: true, если у приложения есть возможность; в противном случае значение false.
Пример: "ReadNetworkProxyConfig": true
Справочник по API: Applibs networking.h
Концептуальное руководство. Подключение к веб-службам
SntpService Логическое значение, указывающее, имеет ли приложение разрешение на настройку службы SNTP: true, если у приложения есть возможность; в противном случае значение false.
Пример: "SntpService" : true
Справочник по API: Applibs networking.h
Концептуальный: СЕРВЕР SNTP
SoftwareUpdateDeferral Логическое значение, указывающее, имеет ли приложение разрешение на отсрочку обновлений программного обеспечения в течение ограниченного периода: true, если у приложения есть возможность; в противном случае значение false.
Пример: "SoftwareUpdateDeferral" : true
Справочник по API: eventloop Applibs.h
Концептуальное руководство. Отсрочка обновлений устройств
SpiMaster Список главных интерфейсов SPI, которые используются приложением.
В высокоуровневом приложении укажите имя периферийного устройства, которое объявлено в файле заголовка определения оборудования.
В RTApp укажите AppManifestValue, объявленное в JSON-файле определения оборудования.
Пример определения оборудования: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Пример необработанного значения: "SpiMaster": [ "ISU0", "ISU1" ]
Справочник по API: Applibs spi.h
Концептуальное руководство. Использование SPI с Azure Sphere
SystemEventNotifications Логическое значение, указывающее, имеет ли приложение разрешение на получение системных уведомлений о событиях: true, если у приложения есть возможность; в противном случае значение false.
Пример: "SystemEventNotifications" : true
Справочник по API: Applibs sysevent.h
Концептуальное руководство. Отсрочка обновлений устройств
SystemTime Логическое значение, указывающее, имеет ли приложение разрешение на настройку системного времени: true, если у приложения есть возможность; в противном случае значение false.
Пример: "SystemTime" : true
Справочник по API: Applibs rtc.h
Концептуальное руководство. Управление системным временем и RTC в Azure Sphere
TimeSyncConfig Логическое значение, указывающее, имеет ли приложение разрешение на настройку службы синхронизации времени: true, если у приложения есть возможность; в противном случае значение false.
Пример: "TimeSyncConfig" : true
Uart Список периферийных устройств UART, используемых приложением. Эта возможность не включает выделенный интерфейс UART на макетной плате MT3620. Сведения о выделенном UART см. в статье "Создание приложения с поддержкой реального времени".
В высокоуровневом приложении укажите имя периферийного устройства, которое объявлено в файле заголовка определения оборудования.
В RTApp укажите AppManifestValue, объявленное в JSON-файле определения оборудования.
Пример определения оборудования: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Пример необработанного значения: "Uart": [ "ISU0", "ISU1" ]
Справочник по API: Applibs uart.h
Концептуальное руководство. Использование UART в Azure Sphere
WifiConfig Логическое значение, указывающее, имеет ли приложение разрешение на использование API WifiConfig для изменения конфигурации Wi-Fi: true, если у приложения есть возможность; в противном случае значение false.
Пример: "WifiConfig" : true
Справочник по API: Applibs wificonfig.h
Концептуальное руководство. Настройка сети

Раздел MutableStorage поддерживает следующие элементы.

Имя Описание
SizeKB Целое число, указывающее объем изменяемого хранилища в кибибайтах. Максимальное значение — 64. Значение 0 обозначает отсутствие поддержки изменяемого хранилища.

Пример

Ниже приведен пример файла app_manifest.json для высокоуровневого приложения, предназначенного для оборудования MT3620 RDB:

{
    "SchemaVersion": 1,
    "Name": "MyTestApp",
    "ComponentId": "072c9364-61d4-4303-86e0-b0f883c7ada2",
    "EntryPoint": "/bin/app",
    "CmdArgs": ["-m", "262144", "-t", "1"],
    "Capabilities": {
        "AllowedConnections" : [
            "my-hub.example.net",
            "contoso.azure-devices.net",
            "global.azure-devices-provisioning.net" ],
        "AllowedTcpServerPorts": [ 1024, 65535 ],
        "AllowedUdpServerPorts": [ 1024, 50000 ],
        "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0",
        "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ],
        "HardwareAddressConfig": true,
        "I2cMaster": [ "ISU2" ],
        "MutableStorage" : {
            "SizeKB": 64,
        },
        "SpiMaster": [ "ISU1" ],
        "SystemTime" : true,
        "Uart": [ "ISU0" ],
        "WifiConfig" : true
    },
    "ApplicationType": "Default",
    "MallocVersion": 2
}

Пример файла app_manifest.json для MyTestApp выполняет следующие функции:

  • Передает четыре аргумента командной строки в приложение.
  • Разрешает подключение только к таким узлам DNS: my hub.example.net, contoso.azure-devices.net и global.azure-devices-provisioning.net.
  • Разрешает входящий трафик TCP через порты 1024 и 65535.
  • Разрешает входящий трафик UDP через порты 1024 и 50000.
  • Указывает UUID клиента Azure Sphere (устаревшая версия) для проверки подлинности устройства и разрешает подключения к службе подготовки устройств.
  • Указывает, что используются три контакта GPIO.
  • Позволяет приложению настроить аппаратный адрес сетевого интерфейса.
  • Указывает, что используется одно периферийное устройство с UART.
  • Обеспечивает использование изменяемого хранилища объемом 64 КиБ.
  • Позволяет приложению использовать API WifiConfig для изменения настроек Wi-Fi.
  • Указывает, что используется один главный интерфейс SPI.
  • Указывает, что используется один главный интерфейс I2C.
  • Позволяет приложению настраивать системное время с помощью API RTC.
  • Включает mallocng для разработки приложений.