Partilhar via


Manifesto de aplicação

O manifesto do aplicativo descreve os recursos, também chamados de recursos do aplicativo, que um aplicativo exige. Cada aplicativo tem um manifesto de aplicativo.

Os aplicativos devem optar por usar recursos listando cada recurso necessário na seção Recursos do manifesto do aplicativo, nenhum recurso é habilitado por padrão. Se um aplicativo solicitar um recurso que não esteja listado, a solicitação falhará. Se o arquivo de manifesto do aplicativo contiver erros, as tentativas de sideload do aplicativo falharão. O manifesto de cada aplicativo deve ser armazenado como app_manifest.json no diretório raiz da pasta do aplicativo no seu PC.

O modelo do Azure Sphere cria automaticamente um manifesto de aplicativo padrão quando você cria um aplicativo. Você deve editar o manifesto padrão para listar os recursos que seu aplicativo requer. Cada exemplo do Azure Sphere também inclui um manifesto de aplicativo. Se você basear seu aplicativo em uma amostra, provavelmente também precisará editar o manifesto.

Diferentes dispositivos do Azure Sphere podem expor recursos do chip de maneiras diferentes. Como resultado, o valor que você usa no manifesto para identificar um recurso específico, como um pino GPIO, pode variar dependendo do hardware para o qual você está desenvolvendo. Gerenciar dependências de hardware de destino fornece mais informações sobre destinos de hardware para um aplicativo de alto nível. No manifesto do aplicativo para um aplicativo de alto nível, use as constantes definidas no arquivo JSON na pasta HardwareDefinitions do diretório de instalação do SDK do Microsoft Azure Sphere. A localização exata do diretório de instalação será diferente no Windows e Linux. Em um aplicativo com capacidade de tempo real (RTApp), use os valores brutos listados em Conteúdo do manifesto do aplicativo.

Quando qualquer aplicativo é sideloaded ou implantado no dispositivo, o tempo de execução do Azure Sphere lê o manifesto do aplicativo para verificar quais recursos o aplicativo tem permissão para usar. As tentativas de acessar recursos que não estão listados no manifesto resultarão em erros de API, como EPERM (permissão negada). Apenas um aplicativo no dispositivo pode usar um recurso. Se você instalar um aplicativo que solicita um recurso que já está em uso, a tentativa falhará.

Conteúdo do manifesto de candidatura

O manifesto do aplicativo inclui os seguintes itens:

Nome Descrição
SchemaVersion Versão do esquema de manifesto do aplicativo em uso. Atualmente deve ser 1. Obrigatório.
Nome Nome do pedido. Na criação do projeto, esse valor é definido como o nome do projeto. O nome pode ser de qualquer comprimento, mas apenas os primeiros 31 caracteres são armazenados no pacote de imagem; assim, o nome aparece truncado em consultas sobre o pacote de imagens. Obrigatório.
ComponentId ID do componente. Visual Studio cria essa ID quando você cria o aplicativo. Se você não usar o Visual Studio, consulte Gerar uma ID de componente para obter informações sobre como criar a ID. Obrigatório.
Ponto de entrada Nome do executável juntamente com o caminho relativo na imagem do sistema de arquivos do aplicativo, que é criado quando o aplicativo é criado. O Visual Studio atualmente usa /bin/app para esse valor. Obrigatório.
CmdArgs Argumentos a serem passados para o aplicativo na inicialização. Coloque cada argumento entre aspas duplas e argumentos separados com uma vírgula. Opcional.
TargetBetaApis Especifica que o aplicativo requer APIs Beta e identifica o conjunto de APIs Beta usadas. Este campo é adicionado automaticamente durante o processo de compilação se o aplicativo for criado usando APIs Beta. Opcional. Consulte Usar recursos beta para obter detalhes.
Tipo de Aplicação Tipo de aplicação. Opcional. Defina como Depurador somente se você estiver criando um substituto para gdbserver.
Capacidades Lista de pares chave/valor que especificam os requisitos de recursos do aplicativo. Obrigatório.
MallocVersion Um inteiro que especifica a versão do malloc, onde 1=standard e 2=mallocng, um malloc aprimorado disponível em versões MUSL maiores que 1.2.1. A versão 2 é recomendada para todo o desenvolvimento de novos aplicativos.

A seção Capacidades suporta o seguinte:

Nota

Aplicativos de alto nível podem usar valores de capacidade de arquivos de definição de hardware ou podem usar valores brutos. No entanto, não é possível misturar os dois tipos de valor no mesmo recurso. RTApps pode usar apenas valores brutos para recursos.

Nome Descrição
ADC O controlador de conversão analógico-digital (ADC) que é usado pelo aplicativo. Esta capacidade reserva todo o controlador ADC (que compreende um bloco de 8 pinos), não apenas o pino 0 no bloco.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Exemplo de valor bruto: "Adc": [ "ADC-CONTROLLER-0" ]
Referência da API: Applibs adc.h
Conceitual: Usando ADCs no Azure Sphere
AllowedApplicationConnections Uma lista de IDs de componentes de aplicativo aos quais o aplicativo tem permissão para se conectar.
Exemplo: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Referência da API: Applibs application.h
Conceitual: Comunique-se com um aplicativo de alto nível
AllowedConnections Uma lista de nomes de host DNS ou endereços IP (IPv4) aos quais o aplicativo tem permissão para se conectar. Se o aplicativo usa um Hub IoT do Azure, a lista deve incluir o endereço IP ou o nome do host DNS para o hub, normalmente hub-name.azure-devices.net. Números de porta e caracteres curinga em nomes e endereços IP não são aceitos.
Exemplo: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Uma lista de portas que permitem o tráfego TCP de entrada. Você pode incluir até 10 portas, e cada porta deve ser listada individualmente. As portas suportadas são 1024 a 65535. Você pode especificar as mesmas portas para TCP e UDP. No entanto, se você especificar a mesma porta para mais de um aplicativo no dispositivo, o segundo aplicativo a ser executado não será carregado.
Exemplo: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Uma lista de portas que permitem o tráfego UDP de entrada. Você pode incluir até 10 portas, e cada porta deve ser listada individualmente. As portas suportadas são 1024 a 65535. Você pode especificar as mesmas portas para TCP e UDP. No entanto, se você especificar a mesma porta para mais de um aplicativo no dispositivo, o segundo aplicativo a ser executado não será carregado.
Exemplo: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Um Boolean que indica se um aplicativo de alto nível tem permissão para gerenciar certificados com a API CertStore: true para habilitar a API; caso contrário, false.
Exemplo: "CertStore" : true
DeviceAuthentication Uma cadeia de caracteres que especifica o UUID do locatário do Azure Sphere (Legado) a ser usado para autenticação de dispositivo.
Exemplo: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Um booleano que indica se o aplicativo tem permissão para configurar o serviço DHCP: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "DhcpService" : true
Referência da API: Applibs networking.h
Conceitual: Usar serviços de rede
EnterpriseWifiConfig Um booleano que indica se um aplicativo de alto nível tem permissão para criar uma rede EAP-TLS e associar certificados a ela: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "EnterpriseWifiConfig" : true
ExternalInterrupt Uma lista de interrupções externas que um RTApp usa. Esse recurso não está disponível para aplicativos de alto nível.
Exemplo: "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Uma lista de GPIOs que o aplicativo usa.
Em um aplicativo de alto nível, especifique o nome GPIO declarado no arquivo de cabeçalho de definição de hardware, como $MT 3620_RDB_LED1_RED.
Em um RTApp, especifique os inteiros que correspondem aos números GPIO no arquivo JSON de definição de hardware. Por exemplo, 8 especifica GPIO 8.
Exemplo de definição de hardware: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Exemplo de valor bruto: "Gpio": [ 8, 12 ]
Referência da API: Applibs gpio.h
Conceitual: Usando GPIOs no Azure Sphere
HardwareAddressConfig Um booleano que indica se o aplicativo tem permissão para configurar o endereço de hardware da interface de rede: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo:"HardwareAddressConfig" : true
Referência da API: Applibs networking.h
Conceitual: Usar serviços de rede
HeapMemStats Um booleano que indica se o rastreamento de alocação de memória de pilha está habilitado: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "HeapMemStats": true
Conceitual:Uso de memória em aplicativos de alto nível
I2cMaster Uma lista de interfaces mestre I2C que são usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Exemplo de valor bruto: "I2cMaster": [ "ISU0", "ISU1" ]
Referência da API: Applibs i2c.h
Conceitual: Usando I2C com o Azure Sphere
I2sSubordinado A interface subordinada Inter-IC Sound (I2S) usada por um RTApp. Esse recurso não está disponível para aplicativos de alto nível. Exemplo de valor bruto: "I2sSubordinate": [ "I2S0", "I2S1" ]
Armazenamento mutável Configurações de armazenamento mutáveis que permitem que o aplicativo use armazenamento persistente.
Exemplo: "MutableStorage" : { "SizeKB": 64, }
Referência da API: Applibs storage.h
Conceitual: Usando o armazenamento no Azure Sphere
NetworkConfig Um booleano que indica se o aplicativo tem permissão para configurar uma interface de rede: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "NetworkConfig" : true
Referência da API: Applibs networking.h
Conceitual: Usar serviços de rede
Controles de energia Uma matriz de cadeias de caracteres que representam recursos granulares para controlar o estado de energia do dispositivo. ForcePowerDown e ForceReboot são os únicos valores suportados.
Aviso: Como ForcePowerDown e ForceReboot permitem que um aplicativo encerre imediatamente todos os aplicativos, você deve certificar-se de que seu dispositivo ainda é capaz de receber atualizações do sistema operacional e do aplicativo. Para obter mais informações e orientações, consulte Forçar desligamento e atualizações.
Exemplo: "PowerControls": ["ForcePowerDown", "ForceReboot"]
Referência da API: Applibs powermanagement.h
Conceptual: Gerir o estado de desativação para dispositivos Azure Sphere
Pwm O modulador de largura de pulso (PWM) que é usado pela aplicação.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Exemplo de valor bruto: "Pwm": [ "PWM-CONTROLLER-0" ]
Referência da API: Applibs pwm.h
Conceitual: Use PWMs em aplicativos de alto nível
ReadNetworkProxyConfig Um Boolean que indica se o aplicativo tem permissão para recuperar a configuração de proxy: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "ReadNetworkProxyConfig": true
Referência da API: Applibs networking.h
Conceptual: Ligar a serviços Web
SntpService Um booleano que indica se o aplicativo tem permissão para configurar o serviço SNTP: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "SntpService" : true
Referência da API: Applibs networking.h
Conceptual: servidor SNTP
SoftwareUpdateDeferral Um booleano que indica se o aplicativo tem permissão para adiar atualizações de software por um período limitado: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "SoftwareUpdateDeferral" : true
Referência da API: Applibs eventloop.h
Conceitual: Adiar atualizações de dispositivos
SpiMaster Uma lista de interfaces mestre SPI que são usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Exemplo de valor bruto: "SpiMaster": [ "ISU0", "ISU1" ]
Referência da API: Applibs spi.h
Conceitual: Usando SPI com o Azure Sphere
SystemEventNotifications Um booleano que indica se o aplicativo tem permissão para receber notificações de eventos do sistema: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "SystemEventNotifications" : true
Referência da API: Applibs sysevent.h
Conceitual: Adiar atualizações de dispositivos
Tempo do Sistema Um booleano que indica se o aplicativo tem permissão para configurar a hora do sistema: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "SystemTime" : true
Referência da API: Applibs rtc.h
Conceptual: Gerir a hora do sistema e o RTC no Azure Sphere
TimeSyncConfig Um Boolean que indica se o aplicativo tem permissão para configurar o serviço de sincronização de tempo: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "TimeSyncConfig" : true
Uart Uma lista de periféricos UART que o aplicativo usa. Esse recurso não habilita o UART dedicado em uma placa de desenvolvimento MT3620. Para obter informações sobre o UART dedicado, consulte Criar um aplicativo capaz de tempo real.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Exemplo de valor bruto: "Uart": [ "ISU0", "ISU1" ]
Referência API: Applibs uart.h
Conceitual: Usar UART no Azure Sphere
WifiConfig Um Boolean que indica se o aplicativo tem permissão para usar a API WifiConfig para alterar a configuração do Wi-Fi: true se o aplicativo tiver a capacidade; caso contrário, false.
Exemplo: "WifiConfig" : true
Referência da API: Applibs wificonfig.h
Conceitual: Configurar rede

A seção MutableStorage suporta o seguinte:

Nome Descrição
TamanhoKB Um inteiro que especifica o tamanho do armazenamento mutável em kibibytes. O valor máximo é 64. Um valor de 0 é equivalente a não ter a capacidade de armazenamento mutável.

Exemplo

A seguir mostra um arquivo de app_manifest.json de exemplo para um aplicativo de alto nível destinado ao hardware RDB MT3620:

{
    "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
}

O arquivo de app_manifest.json de exemplo para MyTestApp faz o seguinte:

  • Passa quatro argumentos de linha de comando para o aplicativo.
  • Permite apenas conexões com os hosts DNS my-hub.example.net, contoso.azure-devices.net e global.azure-devices-provisioning.net.
  • Permite tráfego TCP de entrada nas portas 1024 e 65535.
  • Permite tráfego UDP de entrada nas portas 1024 e 50000.
  • Especifica um UUID de locatário do Azure Sphere (Legado) a ser usado para autenticação de dispositivo e permitir conexões com o Serviço de Provisionamento de Dispositivo.
  • Especifica o uso de três GPIOs.
  • Permite que o aplicativo configure o endereço de hardware da interface de rede.
  • Especifica o uso de um periférico UART.
  • Permite armazenamento mutável com 64 kibibytes de espaço de armazenamento.
  • Permite que o aplicativo use a API WifiConfig para alterar a configuração do Wi-Fi.
  • Especifica o uso de uma interface mestre SPI.
  • Especifica o uso de uma interface mestre I2C.
  • Permite que o aplicativo configure o tempo do sistema usando a API RTC.
  • Permite mallocação para desenvolvimento de aplicativos.