Udostępnij przez


Programowanie przy użyciu pakietów zasobów i układania pakietów

Ważne

Jeśli zamierzasz przesłać aplikację do Sklepu, musisz skontaktować się z pomocą techniczną dla deweloperów systemu Windows i uzyskać zgodę na korzystanie z pakietów zasobów i składania pakietów.

Pakiety zasobów mogą zmniejszyć całkowity rozmiar opakowania i czas publikowania twoich aplikacji w Sklepie. Możesz dowiedzieć się więcej o pakietach zasobów i sposobie przyspieszania iteracji programowania w sekcji Wprowadzenie do pakietów zasobów.

Jeśli myślisz o używaniu pakietów zasobów dla aplikacji lub już wiesz, że chcesz jej używać, prawdopodobnie zastanawiasz się, jak pakiety zasobów zmienią proces programowania. Krótko mówiąc, tworzenie aplikacji dla ciebie pozostaje takie samo — jest to możliwe dzięki składaniu pakietów zasobów.

Dostęp do plików po podzieleniu aplikacji

Aby zrozumieć, jak składanie paczek nie wpływa na proces tworzenia oprogramowania, najpierw cofnijmy się, by zobaczyć, co się dzieje, gdy dzielisz swoją aplikację na wiele paczek (nieważne, czy chodzi o pakiety zasobów czy pakiety z zasobami).

Ogólnie rzecz biorąc, po podzieleniu niektórych plików aplikacji na inne pakiety (które nie są pakietami architektury), nie będzie można uzyskać bezpośredniego dostępu do tych plików od miejsca, w którym działa twój kod. Jest to spowodowane tym, że wszystkie te pakiety są instalowane w różnych katalogach, gdzie zainstalowano pakiet architektoniczny. Na przykład, jeśli tworzysz grę i twoja gra jest zlokalizowana na język francuski i niemiecki i zbudowałeś zarówno dla maszyn x86, jak i x64, to powinieneś mieć te pliki pakietu aplikacji w pakiecie gry:

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

Po zainstalowaniu gry na komputerze użytkownika każdy plik pakietu aplikacji będzie miał własny folder w katalogu WindowsApps . Dlatego dla francuskiego użytkownika z 64-bitowym systemem Windows twoja gra będzie wyglądać następująco:

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

Należy pamiętać, że pliki pakietu aplikacji, które nie mają zastosowania do użytkownika, nie zostaną zainstalowane (pakiety x86 i niemieckie).

W przypadku tego użytkownika główny plik wykonywalny gry będzie znajdować się w folderze MyGame_1.0_x64 i będzie uruchamiany z tego miejsca, a zwykle będzie miał dostęp tylko do plików w tym folderze. Aby uzyskać dostęp do plików w folderze MyGame_1.0_language-fr , należy użyć interfejsów API MRT lub interfejsów API PackageManager. Interfejsy API MRT mogą automatycznie wybierać najbardziej odpowiedni plik z zainstalowanych języków. Więcej informacji na temat interfejsów API mrT można znaleźć w witrynie Windows.ApplicationModel.Resources.Core. Alternatywnie możesz znaleźć zainstalowaną lokalizację pakietu języka francuskiego przy użyciu klasy PackageManager. Nigdy nie należy zakładać zainstalowanej lokalizacji pakietów aplikacji, ponieważ może to ulec zmianie i może się różnić między użytkownikami.

Składanie pakietów zasobów

Jak więc uzyskać dostęp do plików w pakietach zasobów? Możesz nadal korzystać z interfejsów API dostępu do plików, których używasz do uzyskiwania dostępu do dowolnego innego pliku w pakiecie architektury. Dzieje się tak, ponieważ pliki pakietu zasobów zostaną włączone do pakietu architektury podczas jego instalacji poprzez proces łączenia pakietów. Ponadto, ponieważ pliki pakietu zasobów powinny być pierwotnie plikami w pakietach architektury, oznacza to, że nie trzeba zmieniać użycia interfejsu API podczas przenoszenia z luźnego wdrożenia plików do spakowanego wdrożenia w procesie programowania.

Aby dowiedzieć się więcej na temat działania składania pakietów, zacznijmy od przykładu. Jeśli masz projekt gry z następującą strukturą plików:

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

Jeśli chcesz podzielić grę na 3 pakiety: pakiet architektury x64, pakiet zawartości dla audio i pakiet zawartości dla filmów wideo, gra zostanie podzielona na następujące pakiety:

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

Po zainstalowaniu gry pakiet x64 zostanie wdrożony jako pierwszy. Następnie dwa pakiety zasobów będą nadal wdrażane we własnych folderach, podobnie jak MyGame_1.0_language-fr z poprzedniego przykładu. Jednak ze względu na optymalizację pakietów, pliki pakietu zasobów będą również twardo połączone, aby pojawić się w folderze MyGame_1.0_x64 (mimo że pliki są wyświetlane w dwóch lokalizacjach, nie zajmują dwa razy więcej miejsca na dysku). Lokalizacja, w której będą wyświetlane pliki pakietu zasobów, to dokładnie lokalizacja, w której znajdują się względem katalogu głównego pakietu. Oto, jak będzie wyglądać ostateczny układ wdrożonej gry:

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)

W przypadku korzystania z składania pakietów elementów zawartości nadal można uzyskać dostęp do plików podzielonych na pakiety elementów zawartości w taki sam sposób (zwróć uwagę, że folder architektury ma dokładnie taką samą strukturę jak oryginalny folder projektu) i można dodawać pakiety zasobów lub przenosić pliki między pakietami zasobów bez wpływu na kod.

A teraz przejdźmy do bardziej skomplikowanego przykładu składania pakietów. Załóżmy, że chcesz podzielić pliki na podstawie poziomu, a jeśli chcesz zachować taką samą strukturę jak oryginalny folder projektu, pakiety powinny wyglądać następująco:

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

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

Umożliwi to scalanie folderów i plików Level1 w pakiecie MyGame_Level1 oraz folderów i plików Level2 w pakiecie MyGame_Level2 do folderów Audios i Videos podczas składania pakietów. Zgodnie z ogólną zasadą ścieżka względna wyznaczona dla spakowanych plików w pliku mapowania lub układzie pakowania dla MakeAppx.exe jest ścieżką, której należy użyć, aby uzyskać do nich dostęp po złożeniu pakietu.

Na koniec jeśli istnieją dwa pliki w różnych pakietach zasobów, które mają te same ścieżki względne, spowoduje to kolizję podczas składania pakietów. Jeśli wystąpi kolizja, wdrożenie aplikacji spowoduje wystąpienie błędu i niepowodzenie. Ponadto, ponieważ składanie pakietów korzysta z twardych linków, jeśli używasz pakietów zasobów, aplikacja nie będzie mogła zostać wdrożona na dyskach innych niż NTFS. Jeśli wiesz, że aplikacja prawdopodobnie zostanie przeniesiona na dyski wymienne przez użytkowników, nie należy używać pakietów zasobów.