Labo 1b : ajouter une application à votre image
Nous allons maintenant prendre une application (comme l’application IoT Core Par défaut ), l’empaqueter et créer une image Windows IoT Core que vous pouvez charger sur votre appareil.
Notes
Ce processus est identique pour les applications en arrière-plan et au premier plan. La seule différence à prendre en compte est qu’une seule application de premier plan peut être sélectionnée comme application de démarrage, et que toutes les autres applications installées s’exécutent en tant qu’applications en arrière-plan.
Conditions préalables/conditions requises
Notes
À mesure que vous parcourez ce guide de fabrication, ProjectA commence à ressembler à l’image SampleA qui se trouve dans C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA.
Nous allons utiliser l’image ProjectA que nous avons créée à partir de Lab 1a : Créer une image de base.
Vous aurez également besoin des outils suivants pour terminer cette section :
- Visual Studio
- Kit de déploiement et d'évaluation Windows (Windows ADK)
- Windows IoT Core Packages
- IoT Core ADK Add-Ons
- Environnement PowerShell IoT Core
- Un éditeur de texte comme le Bloc-notes ou VS Code
Types d’applications prises en charge
Applications de la plateforme Windows universelle (UWP)
IoT Core est un système d’exploitation centré sur UWP et les applications UWP sont son type d’application principal.
plateforme Windows universelle (UWP) est une plateforme d’applications commune à toutes les versions de Windows 10, y compris Windows 10 IoT Standard. UWP est une évolution de Windows Runtime (WinRT). Vous trouverez plus d’informations et une vue d’ensemble d’UWP ici.
Applications UWP traditionnelles
Les applications UWP fonctionnent simplement sur IoT Core, comme elles le font sur d’autres éditions Windows 10. Une application Xaml simple et vide dans Visual Studio se déploie correctement sur votre appareil IoT Core comme sur un téléphone ou un PC Windows 10. Tous les langages et modèles de projet UWP standard sont entièrement pris en charge sur IoT Core.
Il existe quelques ajouts au modèle d’application UWP traditionnel pour prendre en charge les scénarios IoT et toute application UWP qui en tire parti aura besoin des informations correspondantes ajoutées à son manifeste. En particulier, l’espace de noms « iot » doit être ajouté au manifeste de ces applications UWP standard.
À l’intérieur de l’attribut du manifeste, vous devez définir le xmlns iot et l’ajouter à la liste IgnorableNamespaces. Le xml final doit ressembler à ceci :
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
IgnorableNamespaces="uap mp iot">
Applications en arrière-plan
En plus des applications d’interface utilisateur traditionnelles, IoT Core a ajouté un nouveau type d’application UWP appelé « Applications en arrière-plan ». Ces applications n’ont pas de composant d’interface utilisateur, mais ont plutôt une classe qui implémente l’interface « IBackgroundTask ». Ils inscrivent ensuite cette classe en tant que « StartupTask » pour s’exécuter au démarrage du système. Étant donné qu’il s’agit toujours d’applications UWP, elles ont accès au même ensemble d’API et sont prises en charge à partir du même langage. La seule différence est qu’il n’y a pas de point d’entrée d’interface utilisateur.
Chaque type de IBackgroundTask obtient sa propre stratégie de ressources. Cela est généralement restrictif pour améliorer l’autonomie de la batterie et les ressources de l’ordinateur sur les appareils où ces applications en arrière-plan sont des composants secondaires des applications d’interface utilisateur au premier plan. Sur les appareils IoT, les applications en arrière-plan étant souvent la fonction principale de l’appareil, ces tâches StartupTasks obtiennent une stratégie de ressources qui met en miroir les applications d’interface utilisateur au premier plan sur d’autres appareils.
Vous trouverez des informations détaillées sur les applications d’arrière-plan sur MSDN.
Applications non UWP (Win32)
IoT Core prend en charge certains types d’applications Win32 classiques, comme les applications console Win32 et les services NT. Ces applications sont générées et exécutées de la même façon que sur Windows 10 Desktop. En outre, il existe un modèle de projet Console IoT Core C++ pour faciliter la création de telles applications à l’aide de Visual Studio.
Il existe deux limitations main sur ces applications non UWP :
- Aucune prise en charge de l’interface utilisateur Win32 héritée : IoT Core ne contient pas d’API permettant de créer des fenêtres classiques (HWND). Les méthodes héritées telles que CreateWindow() et CreateWindowEx() ou toute autre méthode qui traite les handles Windows (HWND) ne sont pas disponibles. Par la suite, les frameworks qui dépendent de ces API, notamment MFC, Windows Forms et WPF, ne sont pas pris en charge sur IoT Core.
- Applications C++ uniquement : actuellement, seul C++ est pris en charge pour le développement d’applications Win32 sur IoT Core.
App Service
Les services d’application sont des applications UWP qui fournissent des services à d’autres applications UWP. Ils sont analogues aux services web, sur un appareil. Un service d’application s’exécute sous forme de tâche en arrière-plan dans l’application hôte et peut fournir son service à d’autres applications. Par exemple, un service d’application peut fournir un service de scanneur de code-barres que d’autres applications peuvent utiliser. Les services d’application vous permettent de créer des services sans interface utilisateur que les applications peuvent appeler sur le même appareil, et à compter de Windows 10, version 1607, sur des appareils distants. À partir de Windows 10 version 1607, vous pouvez créer des services d’application qui s’exécutent dans le même processus que l’application hôte.
Vous trouverez ici des informations supplémentaires sur la création d’un service d’application en arrière-plan et l’utilisation du service à partir d’une application uwp (ainsi que des tâches/services en arrière-plan).
Étendre votre application avec des services, des extensions et des packages
Il existe de nombreuses technologies dans Windows 10 pour étendre et composant votre application. Ce tableau doit vous aider à déterminer la technologie que vous devez utiliser en fonction des besoins. Elle est suivie d’une brève description des scénarios et des technologies.
Scénario | Package de ressources | Package de ressources | Package facultatif | Offre groupée plate | Extension d’application | App Service | Installation de streaming |
---|---|---|---|---|---|---|---|
Plug-ins de code tiers | ✔️ | ||||||
Plug-ins de code in-proc | ✔️ | ||||||
Ressources d’expérience utilisateur (chaînes/images) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
Contenu à la demande (par exemple, des niveaux supplémentaires) |
✔️ | ✔️ | ✔️ | ||||
Séparer les licences et les acquisitions | ✔️ | ✔️ | ✔️ | ||||
Acquisition dans l’application | ✔️ | ✔️ | |||||
Optimiser le temps d’installation | ✔️ | ✔️ | ✔️ | ✔️ | |||
Réduire l’encombrement du disque | ✔️ | ✔️ | |||||
Optimiser l’empaquetage | ✔️ | ✔️ | ✔️ | ||||
Réduire le temps de publication | ✔️ | ✔️ | ✔️ | ✔️ |
Créer un package appx
La première étape consiste à créer une application plateforme Windows universelle (UWP) qui s’exécutera sur l’appareil IoT. Vous pouvez ignorer cette section si vous avez déjà créé et testé votre application UWP
Créez une application UWP. Il peut s’agir de n’importe quelle application conçue pour IoT Core, enregistrée en tant que package Appx. Pour notre exemple, nous utilisons l’application IoT Core Par défaut .
Dans Visual Studio, enregistrez votre application en tant que package Appx. Pour ce faire, cliquez sur Project > Store > Créer des packages> d’applicationJe souhaite créer des packages pour le chargement indépendant>suivant
Sélectionnez Emplacement de sortie comme C:\DefaultApp (ou tout autre chemin qui n’inclut pas d’espaces).)
Sélectionnez Générer l’offre groupée d’applications : jamais
Cliquez sur Créer.
Visual Studio crée les fichiers Appx dans votre emplacement spécifié pour les architectures que vous avez sélectionnées (Arm, x86, x64). Dans notre exemple, ce fichier est : C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test
- Facultatif : testez l’application. Notez que vous avez peut-être déjà testé l’application dans le cadre de la génération du projet.
Empaqueter l’Appx
L’étape suivante consiste à empaqueter le fichier Appx, ce qui vous permettra de le personnaliser et de le générer à l’aide du Windows ADK (lorsque vous générez l’image FFU).
Ouvrez
IoTCorePShell.cmd
. Il doit vous inviter à exécuter en tant qu’administrateur.Créez le package pour votre Appx à l’aide de New-IoTAppxPackage. Remplacez l’emplacement du chemin d’accès du fichier et le nom du package par votre package Appx. Dans notre exemple, la commande est la suivante :
Add-IoTAppxPackage "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp (or) newappxpkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
Notes
Le paramètre fga indique que le fichier Appx est une application de premier plan. Si vous spécifiez votre package en tant qu’application d’arrière-plan (avec le paramètre bga) et que vous n’avez aucune autre application de premier plan dans l’image, le système sera bloqué lors du démarrage (affiche un spinner indéfiniment).
Cela crée un dossier à l’emplacement
C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp
, copie les fichiers appx et ses dépendances et génère un fichier customizations.xml ainsi qu’un fichier xml de package utilisé pour générer le package.N’oubliez pas que si votre Appx a des dépendances, vous aurez besoin que le sous-répertoire Dépendances soit présent au même emplacement que votre Appx lorsque vous exécutez cette commande. Si vous ne l’incluez pas, des erreurs sont générées lorsque vous générez votre image FFU.
Cela ajoute également une APPX_MYUWPAPP FeatureID au
C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml
fichier.À partir de l’environnement IoT Core Shell, vous pouvez maintenant générer le package dans un fichier .CAB utilisant New-IoTCabPackage.
New-IoTCabPackage Appx.MyUWPApp (or) buildpkg Appx.MyUWPApp
Le package est généré dans un fichier .CAB sous
C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab
.
Mettre à jour les fichiers de configuration du projet
Vous pouvez maintenant mettre à jour vos fichiers de configuration de projet pour inclure votre application dans le biuld d’image FFU.
Ajoutez le FeatureID pour notre package d’application à l’aide de Add-IoTProductFeature :
Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM (or) addfid ProductA Test APPX_MYUWPAPP -OEM
Cela ajoute un FeatureID appelé APPX_HELLOWOLRDAPP au fichier XML Test OEMInput du produit spécifié (
C:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml
fichier).Supprimer les exemples d’applications de test IOT_BERTHA à l’aide de Remove-IoTProductFeature
Remove-IoTProductFeature ProductA Test IOT_BERTHA (or) removefid ProductA Test IOT_BERTHA
Générer et tester l’image
À partir de l’environnement PowerShell IoT Core, préparez votre environnement à créer des produits en créant tous les packages dans les dossiers de travail (à l’aide de New-IoTCabPackage) :
New-IoTCabPackage All
(or) buildpkg all
Générez à nouveau l’image FFU, comme spécifié dans Labo 1a : Créer une image de base. Vous pouvez utiliser la commande suivante :
New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test
Une fois que le fichier FFU a été généré (il doit maintenant inclure votre application), vous pouvez le flasher sur votre appareil matériel comme spécifié dans Labo 1a.
Pour savoir comment installer un fichier appx sur un appareil IoT, consultez la documentation Installer votre application pour plus d’informations .
Rubriques connexes
Mettre à jour des applications sur vos appareils IoT Core
Étapes suivantes
Labo 1c : Ajouter un fichier et un paramètre de Registre à une image