Desarrollar con paquetes de activos y plegado de paquetesDeveloping with asset packages and package folding

Importante

Si desea 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 plegamientos de paquetes.If you intend to submit your app to the Store, you need to contact Windows developer support and get approval to use asset packages and package folding.

Los paquetes de recursos pueden reducir el tamaño total de empaquetado y el tiempo de publicación de las aplicaciones en la tienda.Asset packages can decrease the overall packaging size and publishing time for your apps to the Store. 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 activos.You can learn more about asset packages and how it can speed up your development iterations at Introduction to asset packages.

Si está pensando en usar paquetes de recursos para la aplicación o ya sabe que desea usarlo, es probable que se pregunte cómo cambiarán los paquetes de recursos el proceso de desarrollo.If you are thinking about using asset packages for your app or already know that you want to use it, then you are probably wondering about how asset packages will change your development process. En Resumen, el desarrollo de aplicaciones para usted sigue siendo el mismo, ya que el plegamiento de paquetes para los paquetes de activos.In short, app development for you stays the same - this is possible because of package folding for asset packages.

Acceso a archivos después de dividir la aplicaciónFile access after splitting your app

Para entender cómo el plegamiento de paquetes no afecta al proceso de desarrollo, volvamos primero a entender lo que sucede cuando divide la aplicación en varios paquetes (con paquetes de recursos o paquetes de recursos).To understand how package folding doesn’t impact your development process, let’s step back first to understand what happens when you split your app into multiple packages (with either asset packages or resource packages).

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 el lugar en el que se ejecuta el código.At a high level, when you split some of your app’s files into other packages (that are not architecture packages), you will not be able to access those files directly relative to where your code runs. Esto se debe a que todos estos paquetes se instalan en directorios diferentes desde donde está instalado el paquete de arquitectura.This is because these packages are all installed into different directories from where your architecture package is installed. Por ejemplo, si está realizando un juego y el juego está localizado en francés y alemán, y se ha creado para equipos x86 y x64, debe tener estos archivos de paquete de aplicación en el lote de aplicaciones del juego:For example, if you’re making a game and your game is localized into French and German and you built for both x86 and x64 machines, then you should have these app package files within the app bundle of your game:

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

Cuando el juego está instalado en el equipo de un usuario, cada archivo de paquete de aplicación tendrá su propia carpeta en el directorio WindowsAppsWhen your game is installed to a user’s machine, each app package file will have its own folder in the WindowsApps directory. Por lo tanto, para un usuario en francés que ejecute Windows de 64 bits, el juego tendrá el siguiente aspecto:So for a French user running 64-bit Windows, your game will look like this:

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).Note that the app package files that are not applicable to the user will not be installed (the x86 and German packages).

Para este usuario, el archivo ejecutable principal del juego estará dentro de la carpeta MyGame_1.0_x64 y se ejecutará desde allí; normalmente, solo tendrá acceso a los archivos de esta carpeta.For this user, your game’s main executable will be within the MyGame_1.0_x64 folder and will run from there, and normally, it will only have access to the files within this folder. Para tener acceso a los archivos de la carpeta MyGame_1.0_language-fr , tendría que usar las API de MRT o las API de PackageManager.In order to access the files in the MyGame_1.0_language-fr folder, you would have to use either the MRT APIs or the PackageManager APIs. 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.The MRT APIs can automatically select the most appropriate file from the languages installed, you can find out more about MRT APIs at Windows.ApplicationModel.Resources.Core. Como alternativa, puede encontrar la ubicación instalada del paquete de idioma francés mediante la clase PackageManager.Alternatively, you can find the installed location of the French language package using the PackageManager Class. No debe asumir nunca la ubicación instalada de los paquetes de la aplicación, ya que esto puede cambiar y puede variar entre los usuarios.You should never assume the installed location of the packages of your app since this can change and can vary between users.

Plegamiento de paquetes de activosAsset package folding

¿Cómo se puede acceder a los archivos de los paquetes de recursos?So how can you access the files in your asset packages? Bien, puede seguir usando las API de acceso a archivos que usa para tener acceso a cualquier otro archivo en el paquete de arquitectura.Well, you can continue to use the file access APIs you are using to access any other file in your architecture package. Esto se debe a que los archivos de paquete de recursos se doblan en el paquete de arquitectura cuando se instala a través del proceso de plegamiento de paquetes.This is because asset package files will be folded into your architecture package when it is installed through the package folding process. Además, dado que los archivos de paquete de activos deben ser originalmente archivos dentro de los paquetes de la 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.Furthermore, since asset package files should originally be files within your architecture packages, this means that you would not have to change API usage when you move from loose files deployment to packaged deployment in your development process.

Para saber más sobre cómo funciona el plegamiento de paquetes, comencemos con un ejemplo.To understand more about how package folding works, let’s start with an example. Si tiene un proyecto de juego con la siguiente estructura de archivos:If you have a game project with the following file structure:

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

Si desea dividir el juego en 3 paquetes: un paquete de arquitectura x64, un paquete de activos para audio y un paquete de recursos para vídeos, el juego se dividirá en estos paquetes:If you want to split your game into 3 packages: an x64 architecture package, an asset package for audios, and an asset package for videos, your game will be divided into these packages:

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á en primer lugar.When you install your game, the x64 package will be deployed first. Después, los dos paquetes de recursos se implementarán en sus propias carpetas, al igual que MyGame_1.0_language-fr en el ejemplo anterior.Then the two asset packages will still be deployed to their own folders, just like MyGame_1.0_language-fr from our previous example. Sin embargo, debido al plegamiento de paquetes, los archivos de paquete de recursos también estarán vinculados de forma rígida para que aparezcan en la carpeta MyGame_1.0_x64 (por lo que, aunque los archivos aparezcan en dos ubicaciones, no ocupen el doble de espacio en disco).However, because of package folding, the asset package files will also be hard linked to appear in the MyGame_1.0_x64 folder (so even though the files appear in two locations, they do not take up twice the disk space). 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.The location in which the asset package files will appear in is exactly the location that they are at relative to the root of the package. Aquí se muestra el aspecto final del juego implementado:So here’s what the final layout of the deployed game will look like:

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 plegamiento de paquetes para los paquetes de recursos, todavía puede tener acceso a los archivos que ha dividido en los paquetes de recursos de la misma manera (Observe que la carpeta de arquitectura tiene exactamente la misma estructura que la carpeta de proyecto original) y puede agregar paquetes de activos o trasladar archivos entre los paquetes de recursos sin afectar al código.When using package folding for asset packages, you can still access the files you’ve split into asset packages the same way (notice that the architecture folder has the exact same structure as the original project folder), and you can add asset packages or move files between asset packages without impacting your code.

Ahora, para ver un ejemplo de plegamiento de paquetes más complicado.Now for a more complicated package folding example. Supongamos que desea dividir los archivos según el nivel en su lugar, y si desea mantener la misma estructura que la carpeta de proyecto original, los paquetes deben tener el siguiente aspecto:Let’s say that you want to split your files based on level instead, and if you want to keep the same structure as the original project folder, your packages should look like this:

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 los archivos de Level1 del paquete de MyGame_Level1 y las carpetas y los archivos de level2 del paquete de MyGame_Level2 se combinen en las carpetas audio y vídeos durante el plegamiento de paquetes.This will allow the Level1 folders and files in the MyGame_Level1 package and Level2 folders and files in the MyGame_Level2 package to be merged into the Audios and Videos folders during package folding. 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 se debe usar para tener acceso a ellas después del plegado de paquetes.So as a general rule, the relative path designated for packaged files in the mapping file or packaging layout for MakeAppx.exe is the path you should use to access them after package folding.

Por último, si hay dos archivos en distintos paquetes de activos que tienen las mismas rutas de acceso relativas, se producirá una colisión durante el plegamiento de paquetes.Lastly, if there are two files in different asset packages that have the same relative paths, this will cause a collision during package folding. Si se produce una colisión, la implementación de la aplicación producirá un error y se producirá un error.If a collision occurs, the deployment of your app will result in an error and fail. Además, dado que el plegado de paquetes aprovecha los vínculos físicos, si usa paquetes de activos, la aplicación no se podrá implementar en unidades que no sean NTFS.Also, because package folding takes advantage of hard links, if you do use asset packages, your app will not be able to be deployed to non-NTFS drives. Si sabe que la aplicación probablemente se va a migrar a unidades extraíbles por los usuarios, no debe usar paquetes de activos.If you know your app will likely be moved to removable drives by your users, then you should not use asset packages.