Laboratorio 1b: Agregar una aplicación a tu imagen
Ahora vamos a tomar una aplicación (como la aplicación predeterminada de IoT Core ), empaquetarla y crear una nueva imagen de Windows IoT Core que puede cargar en el dispositivo.
Nota:
Este proceso es idéntico para las aplicaciones en segundo plano y en primer plano. La única diferencia que hay que tener en cuenta es que solo se puede seleccionar una aplicación en primer plano como aplicación de inicio y todas las demás API instaladas se ejecutarán como aplicaciones en segundo plano.
Requisitos previos y requisitos
Nota:
A medida que pase por esta guía de fabricación, ProjectA comenzará a parecerse a la imagen sampleA que se encuentra en C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA.
Usaremos la imagen de ProjectA que creamos a partir del laboratorio 1a: Crear una imagen básica.
También necesitará las siguientes herramientas para completar esta sección:
- Visual Studio
- Windows Assessment and Deployment Kit (Windows ADK)
- Paquetes de Windows IoT Core
- Add-Ons de ADK de IoT Core
- Entorno de PowerShell de IoT Core
- Un editor de texto como bloc de notas o VS Code
Tipos de aplicación admitidos
Aplicaciones de Plataforma universal de Windows (UWP)
IoT Core es un sistema operativo centrado en UWP y aplicaciones para UWP son su tipo de aplicación principal.
Plataforma universal de Windows (UWP) es una plataforma de aplicaciones común en todas las versiones de Windows 10, incluida Windows 10 IoT Core. UWP es una evolución de Windows Runtime (WinRT). Puedes encontrar más información y una introducción a UWP aquí.
Aplicaciones para UWP tradicionales
Las aplicaciones para UWP solo funcionan en IoT Core, igual que en otras ediciones de Windows 10. Una aplicación Xaml simple y en blanco en Visual Studio se implementará correctamente en el dispositivo IoT Core como lo haría en un teléfono o en un equipo Con Windows 10. Todos los lenguajes estándar de UWP y las plantillas de proyecto son totalmente compatibles con IoT Core.
Hay algunas adiciones al modelo de aplicación para UWP tradicional para admitir escenarios de IoT y cualquier aplicación para UWP que aproveche sus ventajas necesitará la información correspondiente agregada a su manifiesto. En concreto, el espacio de nombres "iot" debe agregarse al manifiesto de estas aplicaciones para UWP estándar.
Dentro del atributo del manifiesto, debe definir los xmlns iot y agregarlos a la lista IgnorableNamespaces. El xml final debe tener este aspecto:
<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">
Aplicaciones en segundo plano
Además de las aplicaciones de interfaz de usuario tradicionales, IoT Core ha agregado un nuevo tipo de aplicación para UWP denominado "Aplicaciones en segundo plano". Estas aplicaciones no tienen un componente de interfaz de usuario, sino que tienen una clase que implementa la interfaz "IBackgroundTask". A continuación, registran esa clase como "StartupTask" para ejecutarse en el arranque del sistema. Puesto que siguen siendo aplicaciones para UWP, tienen acceso al mismo conjunto de API y se admiten desde el mismo idioma. La única diferencia es que no hay ningún punto de entrada de interfaz de usuario.
Cada tipo de IBackgroundTask obtiene su propia directiva de recursos. Esto suele ser restrictivo para mejorar la duración de la batería y los recursos de la máquina en los dispositivos en los que estas aplicaciones en segundo plano son componentes secundarios de las aplicaciones de interfaz de usuario en primer plano. En los dispositivos IoT, las aplicaciones en segundo plano suelen ser la función principal del dispositivo, por lo que estos StartupTasks obtienen una directiva de recursos que refleja las aplicaciones de interfaz de usuario en primer plano en otros dispositivos.
Puede encontrar información detallada sobre las aplicaciones en segundo plano en MSDN.
Aplicaciones que no son para UWP (Win32)
IoT Core admite ciertos tipos de aplicaciones de Win32 tradicionales, como aplicaciones de consola win32 y servicios NT. Estas aplicaciones se compilan y ejecutan de la misma manera que en el escritorio de Windows 10. Además, hay una plantilla de proyecto de consola de C++ de IoT Core para facilitar la compilación de estas aplicaciones mediante Visual Studio.
Hay dos limitaciones principales en estas aplicaciones que no son para UWP:
- No se admite ninguna interfaz de usuario de Win32 heredada: IoT Core no contiene API para crear Windows clásico (HWND). Los métodos heredados, como CreateWindow() y CreateWindowEx() o cualquier otro método que se ocupe de los identificadores de Windows (HWND) no están disponibles. Posteriormente, los marcos que dependen de estas API, como MFC, Windows Forms y WPF, no se admiten en IoT Core.
- Solo aplicaciones de C++: actualmente, solo C++ se admite para desarrollar aplicaciones Win32 en IoT Core.
App Service
Los servicios de aplicaciones son aplicaciones para UWP que proporcionan servicios a otras aplicaciones para UWP. Son análogos a los servicios web, en un dispositivo. Un servicio de aplicaciones se ejecuta como tarea en segundo plano en la aplicación host y puede proporcionar su servicio a otras aplicaciones. Por ejemplo, un servicio de aplicaciones podría proporcionar un servicio de escáner de códigos de barras que podrían usar otras aplicaciones. Los servicios de aplicaciones permiten crear servicios sin interfaz de usuario a los que las aplicaciones pueden llamar en el mismo dispositivo y a partir de Windows 10, versión 1607, en dispositivos remotos. A partir de Windows 10, versión 1607, puedes crear servicios de aplicación que se ejecutan en el mismo proceso que la aplicación host.
Puede encontrar información adicional sobre cómo crear un servicio de aplicaciones en segundo plano, así como consumir el servicio desde aplicaciones para uwp (así como tareas o servicios en segundo plano).
Ampliar la aplicación con servicios, extensiones y paquetes
Hay muchas tecnologías en Windows 10 para ampliar y componentes la aplicación. Esta tabla debe ayudarle a determinar qué tecnología debe usar en función de los requisitos. Va seguido de una breve descripción de los escenarios y tecnologías.
Escenario | Paquete de recursos | Paquete de recursos | Paquete opcional | Paquete plano | Extensión de aplicación | App Service | Instalación de streaming |
---|---|---|---|---|---|---|---|
Complementos de código de terceros | ✔️ | ||||||
Complementos de código en proceso | ✔️ | ||||||
Recursos de experiencia del usuario (cadenas/imágenes) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
Contenido a petición (por ejemplo, niveles adicionales) |
✔️ | ✔️ | ✔️ | ||||
Licencias y adquisiciones independientes | ✔️ | ✔️ | ✔️ | ||||
Adquisición desde la aplicación | ✔️ | ✔️ | |||||
Optimización del tiempo de instalación | ✔️ | ✔️ | ✔️ | ✔️ | |||
Reducir la superficie del disco | ✔️ | ✔️ | |||||
Optimización del empaquetado | ✔️ | ✔️ | ✔️ | ||||
Reducción del tiempo de publicación | ✔️ | ✔️ | ✔️ | ✔️ |
Creación de un paquete appx
El primer paso es crear una aplicación Plataforma universal de Windows (UWP) que se ejecutará en el dispositivo IoT. Puedes omitir esta sección si ya has creado y probado tu aplicación para UWP.
Crear una aplicación para UWP. Puede ser cualquier aplicación diseñada para IoT Core, guardada como un paquete Appx. En nuestro ejemplo, usamos la aplicación predeterminada de IoT Core .
En Visual Studio, guarde la aplicación como un paquete Appx. Para ello, haga clic en Crear paquetes de aplicación de Project > Store >para crear paquetes para transferir localmente>a continuación.>
Seleccione Ubicación de salida como C:\DefaultApp (o cualquier otra ruta de acceso que no incluya espacios).
Seleccione Generar agrupación de aplicaciones: Nunca
Haga clic en Crear.
Visual Studio crea los archivos Appx en la ubicación especificada para las arquitecturas seleccionadas (Arm, x86, x64). En nuestro ejemplo, este archivo es: C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test
- Opcional: pruebe la aplicación. Tenga en cuenta que es posible que ya haya probado la aplicación como parte de la compilación del proyecto.
Empaquetar Appx
El siguiente paso consiste en empaquetar el archivo Appx, que te permitirá personalizarlo y compilarlo con Windows ADK (al compilar la imagen FFU).
Abra
IoTCorePShell.cmd
. Se le pedirá que se ejecute como administrador.Cree el paquete para appx mediante New-IoTAppxPackage. Reemplace la ubicación de la ruta de acceso del archivo y el nombre del paquete por el paquete de Appx. En nuestro ejemplo, el comando es el siguiente:
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
Nota:
El parámetro fga indica que el archivo Appx es una aplicación en primer plano. Si especifica el paquete como una aplicación en segundo plano (con el parámetro bga) y no tiene ninguna otra aplicación en primer plano en la imagen, el sistema se bloqueará al arrancar (muestra un girador indefinidamente).
Esto crea una nueva carpeta en
C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp
, copia los archivos appx y sus dependencias y genera un archivo customizations.xml, así como un archivo xml de paquete que se usa para compilar el paquete.Tenga en cuenta que si Appx tiene dependencias, necesitará que el subdirectorio Dependencias esté presente en la misma ubicación que appx al ejecutar este comando. Si no se incluye esto, se producirán errores al compilar la imagen de FFU.
Esto también agrega un featureID APPX_MYUWPAPP al
C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml
archivo.Desde el entorno de IoT Core Shell, ahora puede compilar el paquete en un archivo .CAB que usa New-IoTCabPackage.
New-IoTCabPackage Appx.MyUWPApp (or) buildpkg Appx.MyUWPApp
Esto compilará el paquete en un archivo .CAB en
C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab
.
Actualizar los archivos de configuración del proyecto
Ahora puede actualizar los archivos de configuración del proyecto para incluir la aplicación en la imagen de FFU biuld.
Agregue featureID para nuestro paquete de aplicación mediante Add-IoTProductFeature:
Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM (or) addfid ProductA Test APPX_MYUWPAPP -OEM
Esto agrega un FeatureID denominado APPX_HELLOWOLRDAPP al archivo XML test OEMInput del producto especificado (
C:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml
file).Eliminación de las aplicaciones de prueba de ejemplo IOT_BERTHA mediante Remove-IoTProductFeature
Remove-IoTProductFeature ProductA Test IOT_BERTHA (or) removefid ProductA Test IOT_BERTHA
Compilación y prueba de la imagen
Desde el entorno de PowerShell de IoT Core, prepárese para crear productos mediante la compilación de todos los paquetes de las carpetas de trabajo (mediante New-IoTCabPackage):
New-IoTCabPackage All
(or) buildpkg all
Vuelva a compilar la imagen de FFU, como se especifica en Laboratorio 1a: Creación de una imagen básica. Puedes usar este comando:
New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test
Una vez que se haya compilado el archivo FFU (ahora debería incluir la aplicación), puede flashelo en el dispositivo de hardware tal como se especifica en Lab 1a.
Para obtener información sobre cómo instalar un archivo appx en un dispositivo IoT, consulte la documentación de Instalación de la aplicación para obtener más información.
Temas relacionados
Actualización de aplicaciones en dispositivos IoT Core
Pasos siguientes
Laboratorio 1c: Agregar un archivo y una configuración del Registro a una imagen