Mengembangkan dengan paket aset dan pelipatan paket

Penting

Jika Anda ingin mengirimkan aplikasi ke Toko, Anda perlu menghubungi dukungan pengembang Windows dan mendapatkan persetujuan untuk menggunakan paket aset dan lipatan paket.

Paket aset dapat mengurangi ukuran kemasan keseluruhan dan waktu penerbitan untuk aplikasi Anda ke Toko. Anda dapat mempelajari lebih lanjut tentang paket aset dan bagaimana hal itu dapat mempercepat iterasi pengembangan Anda di Pengenalan paket aset.

Jika Anda berpikir untuk menggunakan paket aset untuk aplikasi Anda atau sudah tahu bahwa Anda ingin menggunakannya, maka Anda mungkin bertanya-tanya tentang bagaimana paket aset akan mengubah proses pengembangan Anda. Singkatnya, pengembangan aplikasi untuk Anda tetap sama - ini dimungkinkan karena lipatan paket untuk paket aset.

Akses file setelah memisahkan aplikasi Anda

Untuk memahami bagaimana pelipatan paket tidak memengaruhi proses pengembangan Anda, mari kita mundur terlebih dahulu untuk memahami apa yang terjadi ketika Anda membagi aplikasi Anda menjadi beberapa paket (dengan paket aset atau paket sumber daya).

Pada tingkat tinggi, ketika Anda membagi beberapa file aplikasi Anda menjadi paket lain (yang bukan paket arsitektur), Anda tidak akan dapat mengakses file tersebut secara langsung relatif terhadap tempat kode Anda berjalan. Ini karena semua paket ini diinstal ke direktori yang berbeda dari tempat paket arsitektur Anda diinstal. Misalnya, jika Anda membuat game dan game Anda dilokalkan ke dalam bahasa Prancis dan Jerman dan Anda membangun untuk mesin x86 dan x64, maka Anda harus memiliki file paket aplikasi ini dalam bundel aplikasi game Anda:

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

Ketika game Anda diinstal ke komputer pengguna, setiap file paket aplikasi akan memiliki foldernya sendiri di direktori WindowsApps . Jadi untuk pengguna Prancis yang menjalankan Windows 64-bit, game Anda akan terlihat seperti ini:

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

Perhatikan bahwa file paket aplikasi yang tidak berlaku untuk pengguna tidak akan diinstal (paket x86 dan Jerman).

Untuk pengguna ini, executable utama game Anda akan berada dalam folder MyGame_1.0_x64 dan akan berjalan dari sana, dan biasanya, ia hanya akan memiliki akses ke file dalam folder ini. Untuk mengakses file di folder MyGame_1.0_language-fr , Anda harus menggunakan API MRT atau API PackageManager. API MRT dapat secara otomatis memilih file yang paling tepat dari bahasa yang diinstal, Anda dapat mengetahui selengkapnya tentang API MRT di Windows. ApplicationModel.Resources.Core. Atau, Anda dapat menemukan lokasi paket bahasa Prancis yang diinstal menggunakan Kelas PackageManager. Anda tidak boleh mengasumsikan lokasi paket aplikasi yang diinstal karena ini dapat berubah dan dapat bervariasi di antara pengguna.

Pelipatan paket aset

Jadi bagaimana Anda dapat mengakses file dalam paket aset Anda? Nah, Anda dapat terus menggunakan API akses file yang Anda gunakan untuk mengakses file lain dalam paket arsitektur Anda. Ini karena file paket aset akan dilipat ke dalam paket arsitektur Anda ketika diinstal melalui proses lipatan paket. Selain itu, karena file paket aset awalnya harus berupa file dalam paket arsitektur Anda, ini berarti Anda tidak perlu mengubah penggunaan API ketika Anda berpindah dari penyebaran file yang longgar ke penyebaran yang dipaketkan dalam proses pengembangan Anda.

Untuk memahami lebih lanjut tentang cara kerja lipatan paket, mari kita mulai dengan contoh. Jika Anda memiliki proyek game dengan struktur file berikut:

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

Jika Anda ingin membagi game Anda menjadi 3 paket: paket arsitektur x64, paket aset untuk audio, dan paket aset untuk video, game Anda akan dibagi menjadi paket-paket ini:

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

Ketika Anda menginstal game Anda, paket x64 akan disebarkan terlebih dahulu. Kemudian kedua paket aset masih akan disebarkan ke folder mereka sendiri, sama seperti MyGame_1.0_language-fr dari contoh kami sebelumnya. Namun, karena pelipatan paket, file paket aset juga akan ditautkan dengan keras untuk muncul di folder MyGame_1.0_x64 (jadi meskipun file muncul di dua lokasi, file tidak memakan dua kali ruang disk). Lokasi tempat file paket aset akan muncul persis di lokasi yang relatif terhadap akar paket. Jadi inilah tampilan tata letak akhir dari game yang disebarkan:

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)

Saat menggunakan pelipatan paket untuk paket aset, Anda masih dapat mengakses file yang telah Anda bagi menjadi paket aset dengan cara yang sama (perhatikan bahwa folder arsitektur memiliki struktur yang sama persis dengan folder proyek asli), dan Anda dapat menambahkan paket aset atau memindahkan file di antara paket aset tanpa memengaruhi kode Anda.

Sekarang untuk contoh pelipatan paket yang lebih rumit. Katakanlah Anda ingin membagi file berdasarkan tingkat sebagai gantinya, dan jika Anda ingin mempertahankan struktur yang sama dengan folder proyek asli, paket Anda akan terlihat seperti ini:

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

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

Ini akan memungkinkan folder dan file Level1 dalam paket MyGame_Level1 dan folder dan file Level2 dalam paket MyGame_Level2 digabungkan ke dalam folder Audio dan Video selama pelipatan paket. Jadi sebagai aturan umum, jalur relatif yang ditunjuk untuk file paket dalam file pemetaan atau tata letak kemasan untuk MakeAppx.exe adalah jalur yang harus Anda gunakan untuk mengaksesnya setelah pelipatan paket.

Terakhir, jika ada dua file dalam paket aset berbeda yang memiliki jalur relatif yang sama, ini akan menyebabkan tabrakan selama pelipatan paket. Jika tabrakan terjadi, penyebaran aplikasi Anda akan mengakibatkan kesalahan dan gagal. Selain itu, karena lipatan paket memanfaatkan tautan keras, jika Anda menggunakan paket aset, aplikasi Anda tidak akan dapat disebarkan ke drive non-NTFS. Jika Anda tahu aplikasi Anda kemungkinan akan dipindahkan ke drive yang dapat dilepas oleh pengguna Anda, maka Anda tidak boleh menggunakan paket aset.