Dokumen ini menunjukkan cara memublikasikan game Anda di Google Play Game di PC menggunakan Penginstalan yang Dikelola Play.
Dengan Penginstalan Terkelola Play, Google Play mengelola penginstalan, update, dan peng-uninstalan game menggunakan file dan metadata game yang Anda berikan dalam file Windows app bundle (WAB).
Sebelum memulai
Integrasikan Google Play Game SDK ke dalam game Anda.
Mengemas game Anda sebagai file WAB
Untuk membuat file WAB Penginstalan yang Dikelola Play, ikuti langkah-langkah berikut:
Download alat publikasi Play. Anda dapat menjalankan alat ini di command line Windows atau Powershell.
Buat file konfigurasi penerbitan Play, dengan nama apa pun. Misalnya,
play_publishing_config.xmldengan format berikut:<?xml version="1.0" encoding="UTF-8"?> <play-publishing-config version="1.0"> <!-- Application metadata: This section contains basic information about your game. --> <application> <package-name>PACKAGE_NAME</package-name> <version-name>VERSION_NAME</version-name> </application> <!-- Game files: This section specifies which game files to include in the bundle and how to treat them. --> <game-files> <file-set> <root-folder-path>PATH_TO_ROOT_FOLDER</root-folder-path> <!-- absolute or relative to the parent directory of the config xml --> <!-- Exclusions: A list of files or folders to exclude from the bundle. This is useful for removing development files, temporary data, or redundant assets. --> <exclusions> <file-path>REGEX_PATTERN_OF_EXCLUDED_FILES</file-path> <file-path>PATH_TO_BE_EXCLUDED</file-path> </exclusions> <!-- File attributes: Define special handling for certain files during installation and updates. --> <file-attribute value=FILE_ATTRIBUTE_VALUE> <file-path>PATH_TO_FILE</file-path> <file-path>REGEX_PATTERN_OF_FILE_ATTRIBUTE_FILES</file-path> </file-attribute> </file-set> </game-files> <!-- This file represents the startup process for this game. Google Play Games for PC should start this process when user clicks on "Play" on this game. --> <launch-command> <path>PATH_TO_LAUNCH_FILE</path> <arguments>ARGUMENTS</arguments> </launch-command> <!-- Lifecycle operations: Custom actions to be performed during the game's installation and uninstallation. --> <lifecycle-operations> <!-- Install operations: These actions run when the game is installed. 'requiresElevation="true"' will trigger a UAC prompt for administrator rights. There are three types of install operations that can be specified. An instance of each is listed below. --> <install-operation requiresElevation=INSTALL_OPERATION_REQUIRES_ELEVATION> <operation-identifier>OPERATION_IDENTIFIER_STRING</operation-identifier> <execute-file> <path>PATH_TO_INSTALL_EXECUTE_FILE</path> <arguments>ARGUMENTS</arguments> </execute-file> </install-operation> <install-operation requiresElevation=INSTALL_OPERATION_REQUIRES_ELEVATION> <operation-identifier>OPERATION_IDENTIFIER_STRING</operation-identifier> <update-registry baseKey=BASE_KEY> <sub-key>SUB_KEY_PATH</sub-key> <value-name>VALUE_NAME</value-name> <value type=REGISTRY_VALUE_TYPE>VALUE_TEXT</value> </update-registry> </install-operation> <!-- Uninstall operations: These actions run before the game is uninstalled. --> <uninstall-operation requiresElevation=UNINSTALL_OPERATION_REQUIRES_ELEVATION> <execute-file> <path>PATH_TO_UNINSTALL_EXECUTE_FILE</path> <arguments>ARGUMENTS</arguments> </execute-file> </uninstall-operation> </lifecycle-operations> </play-publishing-config>
Ganti kode berikut:
PACKAGE_NAME: Nama paket untuk game Anda. Ini adalah ID unik yang akan dikaitkan dengan game Anda di Google Play. Misalnya,com.yourcompany.yourgame. Nama paket harus mematuhi aturan berikut:- Nama harus memiliki setidaknya dua bagian (satu atau beberapa titik).
- Setiap bagian harus diawali dengan huruf.
- Semua karakter harus berupa alfanumerik atau garis bawah (
[a-zA-Z0-9_]).
VERSION_NAME: String versi game. Ini dapat berupa string arbitrer, tetapi harus unik di semua WAB yang diupload untuk game Anda. Misalnya:1.0,1.0.1-beta,2025.11.24,v1.rc1.PATH_TO_ROOT_FOLDER: Jalur ke folder root yang berisi file game Anda. Semua file dalam folder ini, kecuali yang disebutkan dalam pengecualian, ditambahkan ke paket. Jalur ini dapat berupa absolut atau relatif ke direktori yang berisi fileplay_publishing_config.xml.exclusions: (Opsional) Menentukan jalur atau pola file untuk file dalamPATH_TO_ROOT_FOLDERyang akan dikecualikan dari paket. Anda dapat menyertakan beberapa elemenfile-pathdalam elemenexclusions. Jalur dapat direpresentasikan dengan salah satu dari dua cara berikut:- Sebagai jalur file: Jalur ke file yang akan dikecualikan.
- Sebagai string regex: Semua file yang cocok dengan string ekspresi reguler akan dikecualikan dari paket. Gunakan sintaksis RE2.
file-attribute: (Opsional) Menentukan atribut untuk file tertentu atau file yang cocok dengan pola ekspresi reguler.FILE_ATTRIBUTE_VALUE: Dapat berupa salah satu dari berikut:SKIP_UPDATE: Selama update, atribut ini memberi tahu sistem untuk menyalin file hanya jika file belum ada, sehingga perubahan pada file yang ada akan dipertahankan.MODIFIED_ON_DEVICE: Gunakan ini untuk file yang harus diupdate, tetapi dapat diubah di perangkat setelah penginstalan. Sistem akan mendownload file baru lengkap dan mengganti versi yang diinstal selama update. Jika file ini berbeda dari versi yang diinstal selama pemeriksaan integritas penginstalan, penginstalan tidak dianggap rusak.
file-path: Mengidentifikasi file untuk atribut ini. Anda dapat menyertakan beberapa elemenfile-pathdalam setiap elemenfile-attribute. Setiap jalur dapat ditampilkan dengan salah satu dari dua cara berikut:- Sebagai jalur file: Jalur ke file yang akan dikaitkan dengan atribut ini.
- Sebagai string regex: Semua file yang cocok dengan string ekspresi reguler dikaitkan dengan nilai atribut. Gunakan sintaksis RE2.
PATH_TO_LAUNCH_FILE: Jalur ke file yang dapat dieksekusi yang digunakan untuk meluncurkan game.ARGUMENTS: (Opsional) Argumen command line. Elemen<arguments>digunakan untuk meneruskan argumen ke file yang dapat dieksekusi yang ditentukan dalam<launch-command>,<install-operation>, atau<uninstall-operation>. Setiap penggunaan elemen<arguments>hanya berlaku untuk file yang dapat dieksekusi yang ditentukan bersama elemen tersebut, sehingga Anda dapat menentukan argumen yang berbeda untuk file yang dapat dieksekusi yang berbeda.- Jika file yang dapat dieksekusi memiliki beberapa argumen, pisahkan dengan spasi.
- Tambahkan awalan argumen dengan
--atau-jika file yang dapat dieksekusi memerlukannya. Contoh:<arguments>--package_name --version_name</arguments>
lifecycle-operations: (Opsional) Tindakan kustom yang akan dilakukan selama penginstalan atau penghapusan penginstalan game.install-operation: Tindakan yang akan dijalankan saat game diinstal. Anda dapat menentukan dua jenis operasi penginstalan:execute-filedanupdate-registry.uninstall-operation: Tindakan yang akan dijalankan sebelum game diuninstal. Operasiupdate-registryakan otomatis dikembalikan selama proses penghapusan instalasi.INSTALL_OPERATION_REQUIRES_ELEVATION: Menunjukkan apakah operasi penginstalan perlu dijalankan dengan hak istimewa administrator.- "true": Jalankan sebagai Administrator.
- "false": Jalankan sebagai pengguna saat ini. Nilai ini adalah default jika tidak ditentukan.
UNINSTALL_OPERATION_REQUIRES_ELEVATION: Menunjukkan apakah operasi uninstal perlu dijalankan dengan hak istimewa administrator.- "true": Jalankan sebagai Administrator.
- "false": Jalankan sebagai pengguna saat ini. Nilai ini adalah default jika tidak ditentukan.
operation-identifier: String unik untuk mengidentifikasiinstall-operation.execute-file: Menjalankan file yang dapat dieksekusi.PATH_TO_INSTALL_EXECUTE_FILE: Jalur ke file yang dapat dieksekusi untuk dijalankan selama penginstalan.PATH_TO_UNINSTALL_EXECUTE_FILE: Jalur ke file yang dapat dieksekusi untuk dijalankan sebelum proses uninstal.
update-registry: Membuat atau memperbarui entri registri Windows.BASE_KEY: Menentukan kunci root yang akan digunakan di registri Windows. Nilai yang diterima:HKEY_CLASSES_ROOT,HKEY_CURRENT_CONFIG,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_PERFORMANCE_DATA, danHKEY_USERS. Saat melakukan operasiupdate-registry, tetapkanrequiresElevation="true"padainstall-operationinduk berdasarkanbaseKeyyang digunakan:HKEY_LOCAL_MACHINEatauHKEY_CURRENT_CONFIG: TetapkanrequiresElevation="true".HKEY_CURRENT_USER:requiresElevation="true"tidak diperlukan.HKEY_CLASSES_ROOT: TetapkanrequiresElevation="true"hanya jika menulis ke bagian di seluruh perangkat; tidak diperlukan untuk bagian khusus pengguna.HKEY_USERS: Berisi profil untuk semua pengguna. TetapkanrequiresElevation="true"saat mengubah profil selain profil pengguna saat ini (misalnya, pengguna lain atau.DEFAULT).
SUB_KEY_PATH: Ini merepresentasikan jalur ke kunci tertentu dalam Registry Windows, yang berada di bawahbaseKeyutama.VALUE_NAME: Menentukan nama entri data yang ingin Anda ubah dalam sub-kunci yang ditentukan.REGISTRY_VALUE_TYPE: Atribut ini menentukan jenis data nilai yang ditulis ke registri. Nilai yang didukung adalahSTRINGuntuk string atauDWORDuntuk angka 32-bit.VALUE_TEXT: Data yang akan disimpan di kunci registri.
Cara menggunakan ekspresi reguler
Anda dapat menggunakan ekspresi reguler sintaksis RE2 dalam tag
file-pathuntuk menerapkan pengecualian atau atribut file ke sekelompok file. Jangan lupa untuk menggunakan garis miring/untuk pemisah direktori, dan untuk memisahkan karakter ekspresi reguler khusus dengan garis miring terbalik\. Misalnya, gunakan\.untuk mencocokkan titik literal., atau\duntuk mencocokkan digit.Berikut beberapa contoh umumnya:
- Mencocokkan semua file dengan ekstensi tertentu (Misalnya, .log) di direktori mana pun
Gunakan
.*\.loguntuk mencocokkan jalur apa pun yang diakhiri dengan.log, sepertigame.logataulogs/errors.log.<file-path>.*\.log</file-path>
- Mencocokkan semua file dan subdirektori dalam folder tertentu (Misalnya, 'temp')
Gunakan
temp/.*untuk mencocokkan semua jalur yang diawali dengantemp/, sepertitemp/data.txtatautemp/saves/file.sav.<file-path>temp/.*</file-path>
- Mencocokkan file yang cocok dengan pola di folder tertentu
Gunakan
assets/level\d\.datuntuk mencocokkanassets/level1.dat,assets/level2.dat, tetapi tidakassets/other.dat.<file-path>assets/level\d\.dat</file-path>
- Mencocokkan nama folder saat muncul di mana saja dalam jalur
Gunakan
.*/cache/.*untuk mencocokkan file di direktori apa pun yang bernamacache, sepertigame/cache/file.txtatautemp/cache/other.log.<file-path>.*/cache/.*</file-path>
- Mencocokkan file dengan salah satu dari beberapa ekstensi (Misalnya, .ini, .cfg, .sav)
Gunakan
.*\.(ini|cfg|sav)untuk mencocokkan file apa pun yang diakhiri dengan.ini,.cfg, atau.sav, sepertisettings.ini,config.cfg, atausaves/slot1.sav.<file-path>.*\.(ini|cfg|sav)</file-path>
- Mencocokkan file dengan ekstensi tertentu di direktori tertentu (Misalnya, .ogg di music/ atau sfx/)
Gunakan
(music|sfx)/.*\.ogguntuk mencocokkan file.oggyang berada di direktorimusic/atausfx/, tetapi tidak di tempat lain. Cocok denganmusic/level1.oggatausfx/explosion.ogg, tetapi tidak denganvoice/intro.ogg.<file-path>(music|sfx)/.*\.ogg</file-path>
Contoh file konfigurasi publikasi Play
Berikut contoh
play_publishing_config.xmluntuk game bernamaTestGame:<?xml version="1.0" encoding="UTF-8"?> <play-publishing-config version="1.0"> <application> <package-name>com.test.package</package-name> <version-name>1.0</version-name> </application> <game-files> <file-set> <root-folder-path>C:\Users\Username\game-files</root-folder-path> <exclusions> <file-path>mock_game\d\.exe</file-path> <!-- exclude files using a regex --> <file-path>deprecated_graphics</file-path> <!-- exclude a folder --> <file-path>.*\.log</file-path> <!-- recursively exclude all files with .log extension --> </exclusions> <file-attribute value="SKIP_UPDATE"> <file-path>settings.ini</file-path> </file-attribute> <file-attribute value="MODIFIED_ON_DEVICE"> <file-path>game_assets\d\.zip</file-path> <!-- define the path using regex --> </file-attribute> </file-set> </game-files> <launch-command> <path>launcher_test_game.exe</path> <arguments>--launch-arg</arguments> <!-- optional --> </launch-command> <lifecycle-operations> <install-operation requiresElevation="true"> <operation-identifier>elevated-execute-file</operation-identifier> <execute-file> <path>install_file.exe</path> <arguments>--arg</arguments> <!-- optional --> </execute-file> </install-operation> <install-operation requiresElevation="true"> <operation-identifier>elevated-update-registry</operation-identifier> <update-registry baseKey="HKEY_LOCAL_MACHINE"> <sub-key>SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TestGame</sub-key> <value-name>InstallLocation</value-name> <value type="STRING">C:\Program Files\TestGame</value> </update-registry> </install-operation> <uninstall-operation requiresElevation="true"> <execute-file> <path>uninstall.exe</path> <arguments>--test-arg</arguments> <!-- optional --> </execute-file> </uninstall-operation> </lifecycle-operations> </play-publishing-config>
Jalankan alat publikasi Play di command line atau Powershell Windows, menggunakan perintah
build-bundle:playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
Untuk menimpa file WAB yang ada dengan nama yang sama, gunakan argumen
--force.playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
Ganti kode berikut:
PLAY_PUBLISHING_CONFIG_PATH: Jalur ke konfigurasi publikasi Play. Misalnya,path\to\play_publishing_config.xml.WAB_OUTPUT_PATH: Jalur ke file WAB. Misalnya,path\to\output_bundle.wab.
Cara menggunakan alat publikasi Play
Jika Anda memiliki
playpublishingtool.exe,play_publishing_config.xml, dan file game Anda digame_files/di direktori kerja saat ini:.\ ├── game_files/ ├── play_publishing_config.xml ├── playpublishingtool.exe
Untuk membuat
pmi_bundle.wabdi direktori yang sama, jalankan:playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
Saat alat membuat paket, Anda akan melihat status progres di terminal:
Building bundle: [==== ] 40%
Jika berhasil, Anda akan melihat output yang mirip dengan berikut ini:
Building bundle: [===========] 100% Successfully built the managed install bundle at pmi_bundle.wab
Temukan file WAB di folder:
.\ ├── game_files/ ├── pmi_bundle.wab ├── play_publishing_config.xml ├── playpublishingtool.exe