Sviluppo con pacchetti di asset e riduzione dei pacchetti

Importante

Se si intende inviare l'app allo Store, è necessario contattare il supporto per sviluppatori di Windows e ottenere l'approvazione per usare i pacchetti di asset e la configurazione dei pacchetti.

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

Se si pensa di usare i pacchetti di asset per l'app o si sa già che si vuole usarla, probabilmente ci si chiederà come i pacchetti di asset modificheranno il processo di sviluppo. In breve, lo sviluppo di app per l'utente rimane lo stesso: ciò è possibile a causa della folding del pacchetto per i pacchetti di asset.

Accesso ai file dopo la suddivisione dell'app

Per comprendere in che modo la suddivisione dei pacchetti non influisce sul processo di sviluppo, è prima necessario tornare indietro per comprendere cosa accade quando si suddivide l'app in più pacchetti (con pacchetti di asset o pacchetti di risorse).

A livello elevato, quando si divide 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 quelle in cui è installato il pacchetto dell'architettura. Ad esempio, se si sta effettuando un gioco e il gioco è localizzato in francese e tedesco ed è stato creato per computer x86 e x64, è necessario avere questi file del pacchetto dell'app all'interno del bundle dell'app del 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 . Pertanto, per un utente francese che esegue un Windows a 64 bit, il gioco avrà un aspetto 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 che non sono applicabili all'utente non verranno installati (i pacchetti x86 e tedesco).

Per questo utente, il file eseguibile principale del gioco si trova 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 PackageManager. Le API MRT possono selezionare automaticamente il file più appropriato tra le lingue installate. Per altre informazioni sulle API MRT, vedere Windows. ApplicationModel.Resources.Core. In alternativa, è possibile trovare il percorso installato del pacchetto in lingua francese usando la classe PackageManager. Non si deve mai presupporre il percorso di installazione dei pacchetti dell'app, perché questo può cambiare e può variare tra gli utenti.

Asset package folding

In che modo è possibile accedere ai file nei pacchetti di asset? È 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 di asset verranno rilevati nel pacchetto dell'architettura quando viene installato tramite il processo di configurazione del pacchetto. Inoltre, poiché i file dei pacchetti di asset devono essere originariamente file all'interno dei pacchetti dell'architettura, ciò significa che non è necessario modificare l'utilizzo delle API quando si passa dalla distribuzione di file separati alla distribuzione in pacchetto nel processo di sviluppo.

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

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

Se si vuole 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 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 si installa il gioco, il pacchetto x64 verrà distribuito per primo. I due pacchetti di asset verranno comunque distribuiti nelle proprie cartelle, esattamente come MyGame_1.0_language-fr dell'esempio precedente. Tuttavia, a causa della folding del pacchetto, anche i file del pacchetto di asset saranno collegati in modo da essere visualizzati nella cartella MyGame_1.0_x64 ( quindi, anche se i file vengono visualizzati in due posizioni, lo spazio su disco non è doppio). Il percorso in cui verranno visualizzati i file del pacchetto di asset è esattamente il percorso in cui si trova in relazione alla radice del pacchetto. Ecco 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 funzionalità di folding 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 architecture ha la stessa struttura della cartella del progetto originale) ed è possibile aggiungere pacchetti di asset o spostare file tra pacchetti asset senza influire sul codice.

A questo punto, per un esempio di folding del pacchetto più complesso. Si voglia invece suddividere i file in base al livello e, se si vuole mantenere la stessa struttura della cartella del progetto originale, i pacchetti dovrebbero avere un aspetto simile 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
        `-- ...

In questo modo le cartelle e i file level1 nel pacchetto di MyGame_Level1 e le cartelle e i file di livello 2 nel pacchetto MyGame_Level2 verranno uniti nelle cartelle Audio eVideo durante la fase di ripiegamento del pacchetto. Pertanto, come regola generale, il percorso relativo designato per i file in pacchetto nel file di mapping o nel layout di creazione pacchetti per MakeAppx.exe è il percorso da usare per accedervi dopo la compilazione del pacchetto.

Infine, se sono presenti due file in pacchetti di asset diversi che hanno gli stessi percorsi relativi, si verifica un conflitto durante la fase di creazione del pacchetto. Se si verifica un conflitto, la distribuzione dell'app genererà un errore e avrà esito negativo. Inoltre, poiché la compressione del pacchetto sfrutta i collegamenti rigidi, se si usano pacchetti di asset, l'app non potrà essere distribuita in unità non NTFS. Se si sa che l'app verrà probabilmente spostata in unità rimovibili dagli utenti, non è consigliabile usare i pacchetti di asset.