Desarrollar con paquetes de activos y plegado de paquetes

Importante

Si tiene previsto enviar la aplicación a la Tienda, debe ponerse en contacto con el soporte técnico para desarrolladores de Windows y obtener la aprobación para usar paquetes de recursos y plegado de paquetes.

Los paquetes de recursos pueden reducir el tamaño general del empaquetado y el tiempo de publicación de las aplicaciones en la Tienda. Puede obtener más información sobre los paquetes de recursos y cómo puede acelerar las iteraciones de desarrollo en Introducción a los paquetes de recursos.

Si está pensando en usar paquetes de recursos para la aplicación o ya sabe que quiere usarla, probablemente se pregunte cómo cambiarán los paquetes de recursos el proceso de desarrollo. En resumen, el desarrollo de aplicaciones para usted sigue igual; esto es posible debido al plegado de paquetes para paquetes de recursos.

Acceso a archivos después de dividir la aplicación

Para comprender cómo el plegado de paquetes no afecta al proceso de desarrollo, vamos a dar un paso atrás primero para comprender lo que sucede al dividir la aplicación en varios paquetes (con paquetes de recursos o paquetes de recursos).

En un nivel alto, al dividir algunos de los archivos de la aplicación en otros paquetes (que no son paquetes de arquitectura), no podrá acceder a esos archivos directamente en relación con dónde se ejecuta el código. Esto se debe a que todos estos paquetes se instalan en directorios diferentes desde donde está instalado el paquete de arquitectura. Por ejemplo, si va a realizar un juego y el juego está localizado en francés y alemán y se ha creado para máquinas x86 y x64, debe tener estos archivos de paquete de aplicación dentro del paquete de aplicaciones del juego:

  • MyGame_1.0_x86.appx
  • MyGame_1.0_x64.appx
  • MyGame_1.0_language-fr.appx
  • MyGame_1.0_language-de.appx

Cuando el juego se instala en la máquina de un usuario, cada archivo de paquete de aplicación tendrá su propia carpeta en el directorio WindowsApps. Por lo tanto, para un usuario francés que ejecuta Windows 64 bits, el juego tendrá el siguiente aspecto:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   `-- …
|-- MyGame_1.0_language-fr
|   `-- …
`-- …(other apps)

Tenga en cuenta que los archivos de paquete de aplicación que no son aplicables al usuario no se instalarán (los paquetes x86 y alemán).

Para este usuario, el ejecutable principal del juego estará dentro de la carpeta MyGame_1.0_x64 y se ejecutará desde allí y, normalmente, solo tendrá acceso a los archivos de esta carpeta. Para acceder a los archivos de la carpeta MyGame_1.0_language-fr, tendría que usar las API de MRT o las API de PackageManager. Las API de MRT pueden seleccionar automáticamente el archivo más adecuado de los idiomas instalados; puede encontrar más información sobre las API de MRT en Windows. ApplicationModel.Resources.Core. Como alternativa, puede encontrar la ubicación instalada del paquete de idioma francés mediante la clase PackageManager. Nunca debe asumir la ubicación instalada de los paquetes de la aplicación, ya que esto puede cambiar y puede variar entre los usuarios.

Plegado de paquetes de recursos

¿Cómo se puede acceder a los archivos de los paquetes de recursos? Bien, puede seguir usando las API de acceso a archivos que usa para acceder a cualquier otro archivo del paquete de arquitectura. Esto se debe a que los archivos de paquete de recursos se plegarán en el paquete de arquitectura cuando se instale a través del proceso de plegado de paquetes. Además, dado que los archivos de paquete de recursos deben ser originalmente archivos dentro de los paquetes de arquitectura, esto significa que no tendría que cambiar el uso de la API al pasar de la implementación de archivos flexibles a la implementación empaquetada en el proceso de desarrollo.

Para obtener más información sobre cómo funciona el plegado de paquetes, vamos a empezar con un ejemplo. Si tiene un proyecto de juego con la siguiente estructura de archivos:

MyGame
|-- Audios
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Videos
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe

Si quiere dividir el juego en tres paquetes: un paquete de arquitectura x64, un paquete de recursos para audios y un paquete de recursos para vídeos, el juego se dividirá en estos paquetes:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_1.0_Audios.appx
`-- Audios
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...
MyGame_1.0_Videos.appx
`-- Videos
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...

Al instalar el juego, el paquete x64 se implementará primero. A continuación, los dos paquetes de recursos se seguirán implementando en sus propias carpetas, al igual que MyGame_1.0_language-fr del ejemplo anterior. Sin embargo, debido al plegado de paquetes, los archivos del paquete de recursos también se vincularán de forma difícil para que aparezcan en la carpeta MyGame_1.0_x64 (por lo que, aunque los archivos aparezcan en dos ubicaciones, no ocuparán el doble de espacio en disco). La ubicación en la que aparecerán los archivos del paquete de recursos es exactamente la ubicación en la que se encuentran en relación con la raíz del paquete. Este es el aspecto que tendrá el diseño final del juego implementado:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   |-- Audios
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Videos
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Engine
|   |   `-- ...
|   |-- XboxLive
|   |   `-- ...
|   `-- Game.exe
|-- MyGame_1.0_Audios
|   `-- Audios
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
|-- MyGame_1.0_Videos
|   `-- Videos
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
`-- …(other apps)

Al usar el plegado de paquetes para paquetes de recursos, todavía puede acceder a los archivos que ha dividido en paquetes de recursos de la misma manera (tenga en cuenta que la carpeta de arquitectura tiene exactamente la misma estructura que la carpeta original del proyecto) y puede agregar paquetes de recursos o mover archivos entre paquetes de recursos sin afectar al código.

Ahora, para obtener un ejemplo de plegado de paquetes más complicado. Supongamos que en su lugar quiere dividir los archivos en función del nivel y, si desea mantener la misma estructura que la carpeta del proyecto original, los paquetes deben tener el siguiente aspecto:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_Level1.appx
|-- Audios
|   `-- Level1
|       `-- ...
`-- Videos
    `-- Level1
        `-- ...

MyGame_Level2.appx
|-- Audios
|   `-- Level2
|       `-- ...
`-- Videos
    `-- Level2
        `-- ...

Esto permitirá que las carpetas y archivos Level1 del paquete MyGame_Level1 y las carpetas y archivos level2 del paquete MyGame_Level2 se combinen en las carpetas Audios y Videos durante el plegado del paquete. Por lo tanto, como regla general, la ruta de acceso relativa designada para los archivos empaquetados en el archivo de asignación o el diseño de empaquetado de MakeAppx.exe es la ruta de acceso que debe usar para acceder a ellos después del plegado del paquete.

Por último, si hay dos archivos en paquetes de recursos diferentes que tienen las mismas rutas de acceso relativas, esto provocará una colisión durante el plegado de paquetes. Si se produce una colisión, la implementación de la aplicación producirá un error y producirá un error. Además, dado que el plegado de paquetes aprovecha los vínculos duros, si usa paquetes de recursos, la aplicación no podrá implementarse en unidades que no sean NTFS. Si sabe que es probable que los usuarios mueven la aplicación a unidades extraíbles, no debe usar paquetes de recursos.