Compartilhar via


Manifesto do aplicativo

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

Os aplicativos devem aceitar o uso das funcionalidades listando cada recurso necessário na seção Funcionalidades do manifesto do aplicativo. Nenhuma funcionalidade é habilitada por padrão. Se um aplicativo solicitar uma funcionalidade que não esteja listada, a solicitação falhará. Se o arquivo de manifesto do aplicativo contiver erros, as tentativas de fazer sideload do aplicativo falharão. Cada manifesto do aplicativo deve ser armazenado como app_manifest.json no diretório raiz da pasta do aplicativo no seu computador.

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

Diferentes dispositivos do Azure Sphere podem expor recursos do chip de diferentes maneiras. Como resultado, o valor usado 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 no Linux. Em um aplicativo com capacidade para tempo real (RTApp), use os valores brutos listados em Conteúdo do manifesto do aplicativo.

Quando qualquer aplicativo é carregado por sideload ou implantado no dispositivo, o tempo de execução do Azure Sphere lê o manifesto do aplicativo para determinar quais funcionalidades o aplicativo tem permissão para usar. 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 do aplicativo

O manifesto do aplicativo inclui os seguintes itens:

Nome Descrição
SchemaVersion Versão do esquema de manifesto do aplicativo em uso. No momento, deve ser 1. Obrigatória.
Nome Nome do aplicativo. Na criação do projeto, esse valor é definido como o nome do projeto. O nome pode ter qualquer comprimento, mas apenas os primeiros 31 caracteres são armazenados no pacote de imagens; portanto, o nome aparece truncado em consultas sobre o pacote de imagens. Obrigatória.
ComponentId ID do componente. O Visual Studio cria essa ID quando você compila 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ória.
EntryPoint Nome do executável junto com o caminho relativo na imagem de sistema de arquivos do aplicativo, criada quando o aplicativo é compilado. Atualmente, o Visual Studio usa /bin/app para esse valor. Obrigatória.
CmdArgs Argumentos a serem passados para o aplicativo na inicialização. Coloque cada argumento entre aspas duplas e separe-os com vírgulas. Opcional.
TargetBetaApis Especifica que o aplicativo exige APIs Beta e identifica o conjunto de APIs Beta usado. Esse campo é adicionado automaticamente durante o processo de compilação, se o aplicativo for compilado usando APIs Beta. Opcional. Confira Usar recursos beta para obter detalhes.
ApplicationType Tipo de aplicativo. Opcional. Definido como o Depurador somente se você estiver criando uma substituição para o gdbserver.
Funcionalidades Lista de pares chave/valor que especificam os requisitos de recursos do aplicativo. Obrigatória.
MallocVersion Um inteiro que especifica a versão de malloc, em que 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 Funcionalidades dá suporte ao seguinte:

Observação

Aplicativos de alto nível podem usar valores de capacidade dos arquivos de definição do hardware ou usar valores brutos. No entanto, você não pode misturar tipos de valor na mesma capacidade. Os RTApps podem usar apenas valores brutos para recursos.

Nome Descrição
Adc O controlador de conversão analógico-digital (ADC) usado pelo aplicativo. Essa funcionalidade reserva controlador inteiro do ADC (composto por um bloco de 8 pinos), não apenas fixa 0 no bloco.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho da 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 do 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 nome de host DNS para o hub, normalmente, hub-name.azure-devices.net. Números de porta e caracteres curingas 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 estar listada individualmente. As portas com suporte 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 executar falhará ao carregar.
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 estar listada individualmente. As portas com suporte 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 executar falhará ao carregar.
Exemplo: "AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Um booliano 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 (herdado) 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
Interrupção externa Uma lista de interrupções externas que um RTApp usa. A funcionalidade 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 do GPIO declarado no arquivo de cabeçalho da definição de hardware, como $MT3620_RDB_LED1_RED.
Em um RTApp, especifique os inteiros correspondentes aos números de GPIO no arquivo JSON da definição de hardware. Por exemplo, 8 especifica o 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 booliano que indica se o rastreamento de alocação de memória heap 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 mestras do I2C usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho da definição de hardware.
Em um RTApp, especifique o valor AppManifestValue declarado no arquivo JSON da 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
I2sSubordinate A interface subordinada do I2S (Inter-IC Sound) usada por um RTApp. A funcionalidade não está disponível para aplicativos de alto nível. Exemplo de valor bruto: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Configurações de armazenamento mutável que permitem ao aplicativo usar o 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 um adaptador 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
PowerControls Uma matriz de cadeias de caracteres que representam funcionalidades granulares para controlar o estado de energia do dispositivo. ForcePowerDown e ForceReboot são os únicos valores compatíveis.
Aviso: Como o ForcePowerDown e o ForceReboot permitem que um aplicativo encerre imediatamente todos os aplicativos, você deve certificar-se de que seu dispositivo ainda possa receber atualizações do sistema operacional e do aplicativo. Para obter mais informações e diretrizes, confira Forçar a Desativação e as atualizações.
Exemplo: "PowerControls": ["ForcePowerDown", "ForceReboot"]
Referência da API: Applibs powermanagement.h
Conceitual: Gerenciar o estado de desligamento para dispositivos do Azure Sphere
Pwm O modulador de largura de pulso (PWM) usado pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho da definição de hardware.
Em um RTApp, especifique o valor AppManifestValue declarado no arquivo JSON da 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 booleano que indica se o aplicativo tem permissão para recuperar a configuração de proxy: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo: "ReadNetworkProxyConfig": true
Referência da API: Applibs networking.h
Conceitual: Conectar-se 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
Conceitual: servidor SNTP
SoftwareUpdateDeferral Um booliano 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 dispositivo
SpiMaster Uma lista de interfaces mestras do SPI usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho da definição de hardware.
Em um RTApp, especifique o valor AppManifestValue declarado no arquivo JSON da 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 o 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 dispositivo
SystemTime 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
Conceitual: Gerenciar a hora do sistema e o RTC no Azure Sphere
TimeSyncConfig Um booleano 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 do UART que o aplicativo usa. Essa funcionalidade não habilita o UART dedicado em uma placa de desenvolvimento do MT3620. Para obter informações sobre o UART dedicado, consulte Criar um aplicativo com capacidade para tempo real.
Em um aplicativo de alto nível, especifique o nome do periférico declarado no arquivo de cabeçalho da definição de hardware.
Em um RTApp, especifique o valor AppManifestValue declarado no arquivo JSON da 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 da API: Applibs uart.h
Conceitual: Usar o UART no Azure Sphere
WifiConfig Um booleano que indica se o aplicativo tem permissão para usar a API WifiConfig para alterar a configuração de 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 dá suporte ao seguinte:

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

Exemplo

Veja a seguir um arquivo app_manifest.json de exemplo para um aplicativo de alto nível que direciona o hardware da RDB do 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 exemplo app_manifest.json para MyTestApp faz o seguinte:

  • Passa quatro argumentos de linha de comando para o aplicativo.
  • Só permite conexões com my-hub.example.net, contoso.azure-devices.net e global.azure-devices-provisioning.net dos hosts DNS.
  • Permite o tráfego TCP de entrada nas portas 1024 e 65535.
  • Permite o tráfego UDP de entrada nas portas 1024 e 50000.
  • Especifica um UUID de locatário do Azure Sphere (Herdado) a ser usado para autenticação de dispositivo e permitir conexões com o Serviço de Provisionamento de Dispositivos.
  • 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 UART periférico.
  • Permite o armazenamento mutável com 64 kibibytes de espaço de armazenamento.
  • Permite que o aplicativo use a API WifiConfig para alterar a configuração de Wi-Fi.
  • Especifica o uso de uma interface mestra do SPI.
  • Especifica o uso de uma interface mestra do I2C.
  • Permite que o aplicativo configure a hora do sistema usando a API do RTC.
  • Habilita mallocng para desenvolvimento de aplicativos.