Desarrollo con paquetes de activos y plegado de paquetes

Importante

Si quiere enviar su aplicación a la Store, debe ponerse en contacto con el soporte técnico para desarrolladores de Windows y obtener la aprobación para usar paquetes de activos y plegado de paquetes.

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

Si está pensando en usar paquetes de activos para su aplicación o ya sabe que quiere usarlos, probablemente se pregunte cómo cambiarán los paquetes de activos en el proceso de desarrollo. En resumen, en cuanto a su percepción, el desarrollo de aplicaciones permanece igual: esto es posible debido al plegado de paquetes para los paquetes de activos.

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

Para comprender cómo el plegado de paquetes no afecta al proceso de desarrollo, primero vamos a entender lo que sucede al dividir la aplicación en varios paquetes (con paquetes de activos o paquetes de recursos).

A grandes rasgos, 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 a dónde se ejecuta el código. Esto se debe a que todos estos paquetes se instalan en directorios diferentes desde donde se instala el paquete de arquitectura. Por ejemplo, si va a crear un juego y su juego se localiza en francés y alemán, y lo ha compilado para máquinas x86 y x64, debe tener estos archivos del paquete de la aplicación dentro del lote de aplicaciones de su 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 del paquete de la aplicación tendrá su propia carpeta en el directorio WindowsApps. Por lo tanto, para un usuario francés que ejecuta Windows de 64 bits, el juego tendrá este aspecto:

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

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

Para este usuario, el archivo ejecutable principal del juego estará en la carpeta MyGame_1.0_x64, 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 de PackageManager. Las API de MRT pueden seleccionar automáticamente el archivo más adecuado de los idiomas instalados; puede obtener 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 activos

¿Cómo puede acceder a los archivos de los paquetes de activos? Bueno, puede seguir usando las API de acceso a archivos que está usando para acceder a cualquier otro archivo del paquete de arquitectura. Esto se debe a que los archivos del paquete de activos se plegarán en el paquete de arquitectura cuando se instale mediante el proceso de plegado de paquetes. Además, dado que los archivos del paquete de activos 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 sueltos a la implementación empaquetada en el proceso de desarrollo.

Para obtener más información sobre cómo funciona el plegado de paquetes, comencemos 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 3 paquetes: un paquete de arquitectura x64, un paquete de activos para audios y un paquete de activos para vídeos, 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. Después, los dos paquetes de activos se seguirán implementando en sus propias carpetas, al igual que MyGame_1.0_language-fr de nuestro ejemplo anterior. Pero debido al plegado de paquetes, los archivos del paquete de activos también serán difíciles de vincular para que aparezcan en la carpeta MyGame_1.0_x64 (por lo que, aunque los archivos aparecen en dos ubicaciones, no ocupan dos veces el espacio en disco). La ubicación en la que aparecerán los archivos del paquete de activos es exactamente la ubicación en la que están en relación con la raíz del paquete. Por lo tanto, 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 los paquetes de activos, todavía puede acceder a los archivos que ha dividido en paquetes de activos de la misma manera (tenga en cuenta que la carpeta de arquitectura tiene exactamente la misma estructura que la carpeta del proyecto original) y puede agregar paquetes de activos o mover archivos entre paquetes de activos sin que esto afecte al código.

Ahora vamos a ver un ejemplo de plegado de paquetes más complicado. Supongamos que quiere dividir los archivos en función del nivel; si quiere mantener la misma estructura que la carpeta del proyecto original, los paquetes deben tener este 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 de Level1 del paquete MyGame_Level1, así como las carpetas y archivos de 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 para MakeAppx.exe es la ruta de acceso que debe usar para acceder a ellos después de realizarse el plegado del paquete.

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