Udostępnij za pośrednictwem


Manifest aplikacji

Manifest aplikacji opisuje zasoby, nazywane również możliwościami aplikacji, których wymaga aplikacja. Każda aplikacja ma manifest aplikacji.

Aplikacje muszą wyrazić zgodę na korzystanie z funkcji, wyświetlając listę każdego wymaganego zasobu w sekcji Możliwości manifestu aplikacji. Domyślnie nie są włączone żadne możliwości. Jeśli aplikacja żąda możliwości, która nie znajduje się na liście, żądanie zakończy się niepowodzeniem. Jeśli plik manifestu aplikacji zawiera błędy, próba załadowania aplikacji nie powiedzie się. Manifest każdej aplikacji musi być przechowywany jako app_manifest.json w katalogu głównym folderu aplikacji na komputerze.

Szablon usługi Azure Sphere automatycznie tworzy domyślny manifest aplikacji podczas tworzenia aplikacji. Aby wyświetlić listę możliwości, których wymaga aplikacja, należy edytować manifest domyślny. Każdy przykład usługi Azure Sphere zawiera również manifest aplikacji. Jeśli aplikacja jest oparta na przykładzie, prawdopodobnie trzeba będzie również edytować manifest.

Różne urządzenia usługi Azure Sphere mogą uwidaczniać funkcje mikroukładu na różne sposoby. W związku z tym wartość używana w manifeście w celu zidentyfikowania określonej funkcji, takiej jak wyprowadzenie gpIO, może się różnić w zależności od sprzętu, dla którego się opracowujesz. Zarządzanie docelowymi zależnościami sprzętowymi zawiera więcej informacji na temat celów sprzętowych dla aplikacji wysokiego poziomu. W manifeście aplikacji wysokiego poziomu użyj stałych zdefiniowanych w pliku JSON w folderze HardwareDefinitions katalogu instalacyjnego zestawu SDK usługi Microsoft Azure Sphere. Dokładna lokalizacja katalogu instalacyjnego będzie się różnić w systemach Windows i Linux. W aplikacji obsługującej czas rzeczywistym (RTApp) użyj nieprzetworzonych wartości wymienionych w zawartości manifestu aplikacji.

Gdy dowolna aplikacja jest ładowana bezpośrednio lub wdrażana na urządzeniu, środowisko uruchomieniowe usługi Azure Sphere odczytuje manifest aplikacji, aby ustalić, które możliwości może używać aplikacja. Próby uzyskania dostępu do zasobów, które nie są wymienione w manifeście, spowodują błędy interfejsu API, takie jak EPERM (odmowa uprawnień). Tylko jedna aplikacja na urządzeniu może używać zasobu. Jeśli zainstalujesz aplikację żądającą zasobu, który jest już używany, próba zakończy się niepowodzeniem.

Zawartość manifestu aplikacji

Manifest aplikacji zawiera następujące elementy:

Nazwa/nazwisko opis
Wersja schematu Wersja używanego schematu manifestu aplikacji. Obecnie musi mieć wartość 1. Wymagany.
Nazwa/nazwisko Nazwa aplikacji. Podczas tworzenia projektu ta wartość jest ustawiona na nazwę projektu. Nazwa może mieć dowolną długość, ale w pakiecie obrazu są przechowywane tylko pierwsze 31 znaków. w związku z tym nazwa jest obcinana w zapytaniach dotyczących pakietu obrazów. Wymagany.
Identyfikator składnika Identyfikator składnika. Program Visual Studio tworzy ten identyfikator podczas tworzenia aplikacji. Jeśli nie używasz programu Visual Studio, zobacz Generowanie identyfikatora składnika, aby uzyskać informacje na temat tworzenia identyfikatora. Wymagany.
Punkt wejścia Nazwa pliku wykonywalnego wraz ze ścieżką względną w obrazie systemu plików aplikacji, który jest tworzony podczas kompilowania aplikacji. Program Visual Studio obecnie używa /bin/app dla tej wartości. Wymagany.
CmdArgs Argumenty przekazywane do aplikacji podczas uruchamiania. Ujęć każdy argument w podwójny cudzysłów i rozdziel argumenty przecinkami. Opcjonalny.
TargetBetaApis Określa, że aplikacja wymaga interfejsów API beta i identyfikuje zestaw używanych interfejsów API beta. To pole jest automatycznie dodawane podczas procesu kompilacji, jeśli aplikacja jest kompilowana przy użyciu interfejsów API beta. Opcjonalny. Aby uzyskać szczegółowe informacje, zobacz Korzystanie z funkcji beta.
Typ aplikacji Typ aplikacji. Opcjonalny. Ustaw wartość Debuger tylko wtedy, gdy tworzysz zamiennik dla serwera gdbserver.
Możliwości Lista par klucz/wartość określająca wymagania dotyczące zasobów aplikacji. Wymagany.
MallocVersion Liczba całkowita określająca wersję malloc, gdzie 1=standard i 2=mallocng, ulepszony mallococ dostępny w wersjach MUSL większych niż 1.2.1. W przypadku wszystkich nowych aplikacji zaleca się tworzenie aplikacji w wersji 2.

Sekcja Możliwości obsługuje następujące elementy:

Uwaga

Aplikacje wysokiego poziomu mogą używać wartości możliwości z plików definicji sprzętu lub mogą używać wartości pierwotnych. Nie można jednak mieszać obu typów wartości w tej samej możliwości. Usługa RTApps może używać tylko nieprzetworzonych wartości dla możliwości.

Nazwa/nazwisko opis
Adc Kontroler konwersji analog-do-cyfrowej (ADC), który jest używany przez aplikację. Ta funkcja zastrzega sobie cały kontroler ADC (który składa się z 8-pinowego bloku), a nie tylko pinezki 0 w bloku.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu.
W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu: "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Przykład wartości pierwotnej: "Adc": [ "ADC-CONTROLLER-0" ]
Dokumentacja interfejsu API: Applibs adc.h
Koncepcyjne: używanie usługi ADCs w usłudze Azure Sphere
AllowedApplicationConnections Lista identyfikatorów składników aplikacji, z którymi aplikacja może się łączyć.
Przykład: "AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Dokumentacja interfejsu API: Applibs application.h
Koncepcyjne: komunikacja z aplikacją wysokiego poziomu
Dozwolone połączenia Lista nazw hostów DNS lub adresów IP (IPv4), z którymi aplikacja może nawiązać połączenie. Jeśli aplikacja używa usługi Azure IoT Hub, lista musi zawierać adres IP lub nazwę hosta DNS dla centrum, zazwyczaj hub-name.azure-devices.net. Numery portów i symbole wieloznaczne w nazwach i adresach IP nie są akceptowane.
Przykład: "AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Lista portów, które zezwalają na przychodzący ruch TCP. Można dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony indywidualnie. Obsługiwane porty to od 1024 do 65535. Można określić te same porty zarówno dla protokołu TCP, jak i UDP. Jeśli jednak określisz ten sam port dla więcej niż jednej aplikacji na urządzeniu, uruchomienie drugiej aplikacji zakończy się niepowodzeniem.
Przykład: "AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Lista portów, które zezwalają na przychodzący ruch UDP. Można dołączyć maksymalnie 10 portów, a każdy port musi być wymieniony indywidualnie. Obsługiwane porty to od 1024 do 65535. Można określić te same porty zarówno dla protokołu TCP, jak i UDP. Jeśli jednak określisz ten sam port dla więcej niż jednej aplikacji na urządzeniu, uruchomienie drugiej aplikacji zakończy się niepowodzeniem.
Przykład: "AllowedUdpServerPorts": [ 1024, 50000 ]
Magazyn certyfikatów Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do zarządzania certyfikatami za pomocą interfejsu API CertStore: true w celu włączenia interfejsu API; w przeciwnym razie, fałsz.
Przykład: "CertStore" : true
DeviceAuthentication Ciąg określający identyfikator UUID dzierżawy usługi Azure Sphere (starsza wersja) do użycia na potrzeby uwierzytelniania urządzenia.
Przykład: "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi DHCP: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "DhcpService" : true
Dokumentacja interfejsu API: Applibs networking.h
Koncepcyjne: Korzystanie z usług sieciowych
EnterpriseWifiConfig Wartość logiczna wskazująca, czy aplikacja wysokiego poziomu ma uprawnienia do tworzenia sieci protokołu EAP-TLS i kojarzenia z nią certyfikatów: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "EnterpriseWifiConfig" : true
ExternalInterrupt Lista zewnętrznych przerwań używanych przez aplikację RTApp. Ta funkcja nie jest dostępna dla aplikacji wysokiego poziomu.
Przykład: "ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Lista obiektów zasad grupy używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę GPIO zadeklarowaną w pliku nagłówka definicji sprzętu, taką jak $MT 3620_RDB_LED1_RED.
W aplikacji RTApp określ liczby całkowite, które odpowiadają numerom GPIO w pliku JSON definicji sprzętu. Na przykład 8 określa GPIO 8.
Przykład definicji sprzętu: "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Przykład wartości pierwotnej: "Gpio": [ 8, 12 ]
Dokumentacja interfejsu API: Applibs gpio.h
Koncepcyjne: używanie obiektów zasad grupy w usłudze Azure Sphere
HardwareAddressConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania adresu sprzętowego interfejsu sieciowego: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład:"HardwareAddressConfig" : true
Dokumentacja interfejsu API: Applibs networking.h
Koncepcyjne: Korzystanie z usług sieciowych
HeapMemStats Wartość logiczna wskazująca, czy jest włączone śledzenie alokacji pamięci sterty: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "HeapMemStats": true
Koncepcyjne: użycie pamięci w aplikacjach wysokiego poziomu
I2cMaster Lista interfejsów głównych I2C używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu.
W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu: "I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Przykład wartości pierwotnej: "I2cMaster": [ "ISU0", "ISU1" ]
Dokumentacja interfejsu API: Applibs i2c.h
Koncepcyjne: używanie protokołu I2C z usługą Azure Sphere
I2sSubordinate Interfejs podrzędny Inter-IC Sound (I2S) używany przez aplikację RTApp. Ta funkcja nie jest dostępna dla aplikacji wysokiego poziomu. Przykład wartości pierwotnej: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Ustawienia magazynu modyfikowalnego, które umożliwiają aplikacji używanie magazynu trwałego.
Przykład: "MutableStorage" : { "SizeKB": 64, }
Dokumentacja interfejsu API: Applibs storage.h
Koncepcyjne: Używanie magazynu w usłudze Azure Sphere
Konfiguracja sieci Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania interfejsu sieciowego: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "NetworkConfig" : true
Dokumentacja interfejsu API: Applibs networking.h
Koncepcyjne: Korzystanie z usług sieciowych
PowerControls Tablica ciągów reprezentujących szczegółowe możliwości kontrolowania stanu zasilania urządzenia. ForcePowerDown i ForceReboot są jedynymi obsługiwanymi wartościami.
Ostrzeżenie: Ponieważ forcePowerDown i ForceReboot zezwalają aplikacji na natychmiastowe zakończenie wszystkich aplikacji, upewnij się, że urządzenie nadal może odbierać aktualizacje systemu operacyjnego i aplikacji. Aby uzyskać więcej informacji i wskazówek, zobacz Wymuszanie zasilania i aktualizacji.
Przykład: "PowerControls": ["ForcePowerDown", "ForceReboot"]
Dokumentacja interfejsu API: Applibs powermanagement.h
Koncepcyjne: Zarządzanie stanem zasilania dla urządzeń usługi Azure Sphere
Pwm Modulator szerokości impulsu (PWM), który jest używany przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu.
W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu: "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Przykład wartości pierwotnej: "Pwm": [ "PWM-CONTROLLER-0" ]
Dokumentacja interfejsu API: Applibs pwm.h
Koncepcyjne: Używanie aplikacji PWM w aplikacjach wysokiego poziomu
ReadNetworkProxyConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do pobierania konfiguracji serwera proxy: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "ReadNetworkProxyConfig": true
Dokumentacja interfejsu API: Applibs networking.h
Koncepcyjne: Nawiązywanie połączenia z usługami internetowymi
SntpService Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi SNTP: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "SntpService" : true
Dokumentacja interfejsu API: Applibs networking.h
Koncepcyjne: serwer SNTP
SoftwareUpdateDeferral Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odroczenia aktualizacji oprogramowania przez ograniczony okres: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "SoftwareUpdateDeferral" : true
Dokumentacja interfejsu API: Applibs eventloop.h
Koncepcyjne: odroczenie aktualizacji urządzeń
SpiMaster Lista interfejsów głównych SPI używanych przez aplikację.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu.
W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu: "SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Przykład wartości pierwotnej: "SpiMaster": [ "ISU0", "ISU1" ]
Dokumentacja interfejsu API: Applibs spi.h
Koncepcyjne: używanie spi z usługą Azure Sphere
SystemEventNotifications Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do odbierania powiadomień o zdarzeniach systemowych: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "SystemEventNotifications" : true
Dokumentacja interfejsu API: Applibs sysevent.h
Koncepcyjne: odroczenie aktualizacji urządzeń
SystemTime Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania czasu systemowego: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "SystemTime" : true
Dokumentacja interfejsu API: Applibs rtc.h
Koncepcyjne: Zarządzanie czasem systemowym i protokołem RTC w usłudze Azure Sphere
TimeSyncConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do konfigurowania usługi synchronizacji czasowej: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "TimeSyncConfig" : true
Uart Lista urządzeń peryferyjnych UART używanych przez aplikację. Ta funkcja nie włącza dedykowanego karty UART na tablicy deweloperów MT3620. Aby uzyskać informacje o dedykowanym UART, zobacz Tworzenie aplikacji obsługującej czas rzeczywisty.
W aplikacji wysokiego poziomu określ nazwę urządzenia peryferyjnego zadeklarowaną w pliku nagłówka definicji sprzętu.
W aplikacji RTApp określ wartość AppManifestValue zadeklarowaną w pliku JSON definicji sprzętu.
Przykład definicji sprzętu: "Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Przykład wartości pierwotnej: "Uart": [ "ISU0", "ISU1" ]
Dokumentacja interfejsu API: Applibs uart.h
Koncepcyjne: Używanie funkcji UART w usłudze Azure Sphere
WifiConfig Wartość logiczna wskazująca, czy aplikacja ma uprawnienia do używania interfejsu API WifiConfig w celu zmiany konfiguracji sieci Wi-Fi: prawda, jeśli aplikacja ma możliwość; w przeciwnym razie, fałsz.
Przykład: "WifiConfig" : true
Dokumentacja interfejsu API: Applibs wificonfig.h
Koncepcyjne: Konfigurowanie sieci

Sekcja MutableStorage obsługuje następujące elementy:

Nazwa/nazwisko opis
Rozmiar KB Liczba całkowita określająca rozmiar magazynu modyfikowalnego w kibibajtach. Maksymalna wartość to 64. Wartość 0 jest równoważna braku możliwości magazynu modyfikowalnego.

Przykład

Poniżej przedstawiono przykładowy plik app_manifest.json dla aplikacji wysokiego poziomu, która jest przeznaczona dla sprzętu 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
}

Przykładowy plik app_manifest.json dla aplikacji MyTestApp wykonuje następujące czynności:

  • Przekazuje do aplikacji cztery argumenty wiersza polecenia.
  • Zezwala tylko na połączenia z hostami DNS my-hub.example.net, contoso.azure-devices.net i global.azure-devices-provisioning.net.
  • Zezwala na przychodzący ruch TCP na portach 1024 i 65535.
  • Zezwala na przychodzący ruch UDP na portach 1024 i 50000.
  • Określa identyfikator UUID dzierżawy usługi Azure Sphere (starsza wersja) do użycia na potrzeby uwierzytelniania urządzenia i zezwala na połączenia z usługą Device Provisioning Service.
  • Określa użycie trzech obiektów zasad grupy.
  • Umożliwia aplikacji skonfigurowanie adresu sprzętowego interfejsu sieciowego.
  • Określa użycie jednego urządzenia peryferyjnego UART.
  • Umożliwia magazyn modyfikowalny z 64 kibibajtami miejsca do magazynowania.
  • Umożliwia aplikacji używanie interfejsu API WifiConfig w celu zmiany konfiguracji sieci Wi-Fi.
  • Określa użycie jednego interfejsu głównego SPI.
  • Określa użycie jednego interfejsu głównego I2C.
  • Umożliwia aplikacji konfigurowanie czasu systemowego przy użyciu interfejsu API RTC.
  • Umożliwia mallocng na potrzeby tworzenia aplikacji.