Condividi tramite


Sviluppo con pacchetti di asset e riduzione dei pacchetti

Importante

Se intendi inviare la tua app allo Store, devi contattare il supporto per sviluppatori Windows e ottenere l'approvazione per usare pacchetti di asset e riduzione dei pacchetti.

I pacchetti asset possono ridurre le dimensioni complessive dei pacchetti e il tempo di pubblicazione per le app nello Store. Per altre informazioni sui pacchetti di asset e su come è possibile velocizzare le iterazioni di sviluppo, vedere Introduzione ai pacchetti di asset.

Se stai pensando all'uso dei pacchetti di asset per la tua app o sai già che vuoi usarlo, probabilmente ti stai chiedendo in che modo i pacchetti di asset cambieranno il processo di sviluppo. In breve, lo sviluppo di app rimane invariato. Ciò è possibile a causa della riduzione del pacchetto per i pacchetti di asset.

Accesso ai file dopo la suddivisione dell'app

Per comprendere in che modo la riduzione del pacchetto non influisce sul processo di sviluppo, torniamo prima di tutto per capire cosa accade quando dividi l'app in più pacchetti (con pacchetti di asset o pacchetti di risorse).

A livello generale, quando si suddivideno alcuni file dell'app in altri pacchetti (che non sono pacchetti di architettura), non sarà possibile accedere a tali file direttamente rispetto alla posizione in cui viene eseguito il codice. Questo perché questi pacchetti vengono tutti installati in directory diverse da cui è installato il pacchetto di architettura. Ad esempio, se stai creando un gioco e il tuo gioco viene localizzato in francese e tedesco e hai creato sia per macchine x86 che x64, dovresti avere questi file di pacchetto dell'app all'interno del bundle dell'app del tuo gioco:

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

Quando il gioco viene installato nel computer di un utente, ogni file del pacchetto dell'app avrà una propria cartella nella directory WindowsApps . Quindi, per un utente francese che esegue Windows a 64 bit, il gioco sarà simile al seguente:

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

Si noti che i file del pacchetto dell'app non applicabili all'utente non verranno installati (i pacchetti x86 e tedeschi).

Per questo utente, il file eseguibile principale del gioco si troverà all'interno della cartella MyGame_1.0_x64 e verrà eseguito da questa cartella e in genere avrà accesso solo ai file all'interno di questa cartella. Per accedere ai file nella cartella MyGame_1.0_language-fr , è necessario usare le API MRT o le API PackageManager. Le API MRT possono selezionare automaticamente il file più appropriato dalle lingue installate. Per altre informazioni sulle API MRT, vedere Windows.ApplicationModel.Resources.Core. In alternativa, è possibile trovare il percorso installato del pacchetto di lingua francese usando la classe PackageManager. Non dovresti mai presupporre il percorso installato dei pacchetti della tua app, perché questo può cambiare e può variare tra gli utenti.

Riduzione del pacchetto asset

In che modo è possibile accedere ai file nei pacchetti di asset? È anche possibile continuare a usare le API di accesso ai file usate per accedere a qualsiasi altro file nel pacchetto dell'architettura. Ciò è dovuto al fatto che i file del pacchetto asset verranno piegati nel pacchetto di architettura quando viene installato tramite il processo di riduzione del pacchetto. Inoltre, poiché i file del pacchetto di asset devono essere originariamente file all'interno dei pacchetti di architettura, ciò significa che non è necessario modificare l'utilizzo dell'API quando si passa dalla distribuzione di file separati alla distribuzione in pacchetto nel processo di sviluppo.

Per altre informazioni sul funzionamento della riduzione dei pacchetti, si inizierà con un esempio. Se hai un progetto di gioco con la struttura di file seguente:

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

Se vuoi suddividere il gioco in 3 pacchetti: un pacchetto di architettura x64, un pacchetto di asset per audio e un pacchetto di asset per i video, il tuo gioco verrà suddiviso in questi pacchetti:

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
        `-- ...

Quando installi il gioco, il pacchetto x64 verrà distribuito per primo. I due pacchetti di asset verranno quindi distribuiti nelle proprie cartelle, proprio come MyGame_1.0_language-fr dell'esempio precedente. Tuttavia, a causa della riduzione del pacchetto, i file del pacchetto asset saranno anche hard linked da visualizzare nella cartella MyGame_1.0_x64 (anche se i file vengono visualizzati in due posizioni, non occupano due volte lo spazio su disco). Il percorso in cui verranno visualizzati i file del pacchetto asset è esattamente il percorso in cui si trovano rispetto alla radice del pacchetto. Di seguito è riportato l'aspetto del layout finale del gioco distribuito:

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)

Quando si usa la riduzione del pacchetto per i pacchetti di asset, è comunque possibile accedere ai file suddivisi in pacchetti di asset allo stesso modo (si noti che la cartella dell'architettura ha esattamente la stessa struttura della cartella del progetto originale) ed è possibile aggiungere pacchetti di asset o spostare file tra pacchetti di asset senza influire sul codice.

Per un esempio di riduzione del pacchetto più complesso. Si supponga di voler suddividere i file in base al livello e, se si vuole mantenere la stessa struttura della cartella del progetto originale, i pacchetti dovrebbero essere simili al seguente:

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

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

Ciò consentirà di unire le cartelle e i file Level1 nelle cartelle e nei file di MyGame_Level1 pacchetto e Level2 nel pacchetto MyGame_Level2 nelle cartelle Audio e Video durante la riduzione del pacchetto. Pertanto, come regola generale, il percorso relativo designato per i file in pacchetto nel file di mapping o layout di creazione di pacchetti per MakeAppx.exe è il percorso da usare per accedervi dopo la riduzione del pacchetto.

Infine, se sono presenti due file in pacchetti asset diversi con gli stessi percorsi relativi, questo causerà un conflitto durante la riduzione del pacchetto. Se si verifica un conflitto, la distribuzione dell'app genererà un errore e avrà esito negativo. Inoltre, poiché la riduzione del pacchetto sfrutta i collegamenti rigidi, se usi pacchetti di asset, l'app non sarà in grado di essere distribuita in unità non NTFS. Se sai che l'app verrà probabilmente spostata in unità rimovibili dagli utenti, non dovresti usare i pacchetti di asset.