เอกสารนี้จะแสดงวิธีเผยแพร่เกมใน Google Play Games บน PC โดยใช้การติดตั้งที่จัดการโดย Play
เมื่อใช้การติดตั้งที่จัดการโดย Play ทาง Google Play จะจัดการการติดตั้ง การอัปเดต และการถอนการติดตั้งเกมโดยใช้ไฟล์เกมและข้อมูลเมตาที่คุณระบุในไฟล์ Windows App Bundle (WAB)
ก่อนเริ่มต้น
ผสานรวม Google Play Games SDK เข้ากับเกม
แพ็กเกจเกมเป็นไฟล์ WAB
หากต้องการสร้างไฟล์ WAB สำหรับการติดตั้งที่จัดการโดย Play ให้ทำตามขั้นตอนต่อไปนี้
ดาวน์โหลดเครื่องมือเผยแพร่ของ Play คุณสามารถเรียกใช้เครื่องมือนี้ในบรรทัดคำสั่ง Windows หรือ Powershell
สร้างไฟล์การกำหนดค่าการเผยแพร่ของ Play โดยตั้งชื่อไฟล์ได้ตามต้องการ เช่น
play_publishing_config.xmlที่มีรูปแบบดังนี้<?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>
แทนที่ข้อมูลต่อไปนี้
PACKAGE_NAME: ชื่อแพ็กเกจของเกม ซึ่งเป็นตัวระบุที่ไม่ซ้ำกันที่จะเชื่อมโยงกับเกมของคุณใน Google Play เช่นcom.yourcompany.yourgameชื่อแพ็กเกจต้องเป็นไปตามกฎต่อไปนี้- ต้องมีอย่างน้อย 2 ส่วน (จุด 1 จุดขึ้นไป)
- แต่ละส่วนต้องขึ้นต้นด้วยตัวอักษร
- อักขระทั้งหมดต้องเป็นตัวอักษรและตัวเลขคละกัน หรือขีดล่าง (
[a-zA-Z0-9_])
VERSION_NAME: สตริงเวอร์ชันของเกม ซึ่งอาจเป็นสตริงใดก็ได้ แต่ต้องไม่ซ้ำกันใน WAB ทั้งหมดที่อัปโหลดสำหรับเกม เช่น1.0,1.0.1-beta,2025.11.24,v1.rc1PATH_TO_ROOT_FOLDER: เส้นทางไปยังโฟลเดอร์รูทที่มีไฟล์เกม ระบบจะเพิ่มไฟล์ทั้งหมดในโฟลเดอร์นี้ลงในแพ็กเกจ ยกเว้นไฟล์ที่ระบุไว้ในส่วนการยกเว้น เส้นทางนี้อาจเป็นเส้นทาง สัมบูรณ์ หรือเส้นทาง สัมพัทธ์ กับไดเรกทอรีที่มีไฟล์play_publishing_config.xmlexclusions: (ไม่บังคับ) ระบุเส้นทางไฟล์หรือรูปแบบของไฟล์ภายในPATH_TO_ROOT_FOLDERที่จะยกเว้นจากแพ็กเกจ คุณสามารถใส่องค์ประกอบfile-pathหลายรายการภายในองค์ประกอบexclusionsโดยเส้นทางสามารถแสดงได้ 2 วิธีดังนี้- เป็นเส้นทางไฟล์: เส้นทางไปยังไฟล์ที่จะยกเว้น
- เป็นสตริงนิพจน์ทั่วไป: ระบบจะยกเว้นไฟล์ทั้งหมดที่ตรงกับสตริงนิพจน์ทั่วไป จากแพ็กเกจ ใช้ไวยากรณ์ RE2
file-attribute: (ไม่บังคับ) กำหนดแอตทริบิวต์สำหรับไฟล์ที่เฉพาะเจาะจงหรือไฟล์ที่ตรงกับรูปแบบนิพจน์ทั่วไปFILE_ATTRIBUTE_VALUE: อาจเป็นค่าใดค่าหนึ่งต่อไปนี้SKIP_UPDATE: ระหว่างการอัปเดต แอตทริบิวต์นี้จะบอกให้ระบบคัดลอกไฟล์ก็ต่อเมื่อไฟล์นั้นยังไม่มีอยู่ โดยจะเก็บการเปลี่ยนแปลงใดๆ ในไฟล์ที่มีอยู่ไว้MODIFIED_ON_DEVICE: ใช้แอตทริบิวต์นี้กับไฟล์ที่ต้องอัปเดต แต่ผู้ใช้สามารถแก้ไขไฟล์ในอุปกรณ์ได้หลังการติดตั้ง ระบบจะดาวน์โหลดไฟล์ใหม่ฉบับเต็มและเขียนทับเวอร์ชันที่ติดตั้งไว้ระหว่างการอัปเดต หากไฟล์นี้แตกต่างจากเวอร์ชันที่ติดตั้งไว้ระหว่างการตรวจสอบความสมบูรณ์ของการติดตั้ง ระบบจะไม่ถือว่าการติดตั้งเสียหาย
file-path: ระบุไฟล์สำหรับแอตทริบิวต์นี้ คุณสามารถใส่องค์ประกอบfile-pathหลายรายการภายในองค์ประกอบfile-attributeแต่ละรายการ โดยเส้นทางแต่ละเส้นทางสามารถแสดงได้ 2 วิธีดังนี้- เป็นเส้นทางไฟล์: เส้นทางไปยังไฟล์ที่จะเชื่อมโยงแอตทริบิวต์นี้
- **เป็นสตริงนิพจน์ทั่วไป**: ระบบจะเชื่อมโยงไฟล์ทั้งหมดที่ตรงกับสตริงนิพจน์ทั่วไป กับค่าแอตทริบิวต์ ใช้ไวยากรณ์ RE2
PATH_TO_LAUNCH_FILE: เส้นทางไปยังไฟล์ปฏิบัติการที่ใช้เปิดเกมARGUMENTS: (ไม่บังคับ) อาร์กิวเมนต์บรรทัดคำสั่ง องค์ประกอบ<arguments>ใช้เพื่อส่งอาร์กิวเมนต์ไปยังไฟล์ปฏิบัติการที่ระบุใน<launch-command>,<install-operation>หรือ<uninstall-operation>การใช้ส่วนประกอบ<arguments>แต่ละครั้งจะมีผลกับไฟล์ปฏิบัติการที่กำหนดไว้ข้างๆ เท่านั้น ซึ่งช่วยให้คุณระบุอาร์กิวเมนต์ต่างๆ สำหรับไฟล์ปฏิบัติการต่างๆ ได้- หากไฟล์ปฏิบัติการมีอาร์กิวเมนต์หลายรายการ ให้คั่นอาร์กิวเมนต์เหล่านั้นด้วยช่องว่าง
- เติม
--หรือ-ไว้ข้างหน้าอาร์กิวเมนต์หากไฟล์ปฏิบัติการกำหนดไว้ ตัวอย่าง<arguments>--package_name --version_name</arguments>
lifecycle-operations: (ไม่บังคับ) การดำเนินการที่กำหนดเองที่จะดำเนินการระหว่างการติดตั้งหรือการถอนการติดตั้งเกมinstall-operation: การดำเนินการที่จะเรียกใช้เมื่อมีการติดตั้งเกม คุณสามารถระบุการดำเนินการติดตั้งได้ 2 ประเภท ได้แก่execute-fileและupdate-registryuninstall-operation: การดำเนินการที่จะเรียกใช้ก่อนที่จะถอนการติดตั้งเกม ระบบจะยกเลิกการดำเนินการupdate-registryโดยอัตโนมัติระหว่างการถอนการติดตั้งINSTALL_OPERATION_REQUIRES_ELEVATION: ระบุว่าการดำเนินการติดตั้งต้องเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบหรือไม่- "true": เรียกใช้ในฐานะผู้ดูแลระบบ
- "false": เรียกใช้ในฐานะผู้ใช้ปัจจุบัน ซึ่งเป็นค่าเริ่มต้นหากไม่ได้ระบุ
UNINSTALL_OPERATION_REQUIRES_ELEVATION: ระบุว่าการดำเนินการถอนการติดตั้งต้องเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบหรือไม่- "true": เรียกใช้ในฐานะผู้ดูแลระบบ
- "false": เรียกใช้ในฐานะผู้ใช้ปัจจุบัน ซึ่งเป็นค่าเริ่มต้นหากไม่ได้ระบุ
operation-identifier: สตริงที่ไม่ซ้ำกันเพื่อระบุinstall-operationexecute-file: เรียกใช้ไฟล์ปฏิบัติการPATH_TO_INSTALL_EXECUTE_FILE: เส้นทางไปยังไฟล์ปฏิบัติการที่จะเรียกใช้ระหว่างการติดตั้งPATH_TO_UNINSTALL_EXECUTE_FILE: เส้นทางไปยังไฟล์ปฏิบัติการที่จะเรียกใช้ก่อนการถอนการติดตั้ง
update-registry: สร้างหรืออัปเดตรายการรีจิสทรีของ WindowsBASE_KEY: กำหนดคีย์รูทที่จะใช้ในรีจิสทรีของ Windows ค่าที่ยอมรับ ได้แก่HKEY_CLASSES_ROOT,HKEY_CURRENT_CONFIG,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_PERFORMANCE_DATAและHKEY_USERSเมื่อดำเนินการupdate-registryให้ตั้งค่าrequiresElevation="true"ในinstall-operationหลักตามbaseKeyที่ใช้:HKEY_LOCAL_MACHINEหรือHKEY_CURRENT_CONFIG: ตั้งค่าrequiresElevation="true"HKEY_CURRENT_USER:requiresElevation="true"ไม่จำเป็นต้องตั้งค่าHKEY_CLASSES_ROOT: ตั้งค่าrequiresElevation="true"ก็ต่อเมื่อเขียนลงในส่วนที่ใช้ได้ทั่วทั้งเครื่อง เท่านั้น ไม่จำเป็นสำหรับส่วนที่เฉพาะเจาะจงของผู้ใช้HKEY_USERS: มีโปรไฟล์สำหรับผู้ใช้ทุกคน ตั้งค่าrequiresElevation="true"เมื่อแก้ไขโปรไฟล์ของผู้ใช้รายอื่นที่ไม่ใช่ผู้ใช้ปัจจุบัน (เช่น ผู้ใช้รายอื่นหรือ.DEFAULT)
SUB_KEY_PATH: แสดงเส้นทางไปยังคีย์ที่เฉพาะเจาะจงภายในรีจิสทรีของ Windows ซึ่งซ้อนอยู่ใต้baseKeyหลักVALUE_NAME: ระบุชื่อรายการข้อมูลที่ต้องการแก้ไขภายในคีย์ย่อยที่กำหนดREGISTRY_VALUE_TYPE: แอตทริบิวต์นี้ระบุประเภทข้อมูลของค่าที่จะเขียนลงในรีจิสทรี ค่าที่รองรับคือSTRINGสำหรับสตริงหรือDWORDสำหรับตัวเลข 32 บิตVALUE_TEXT: ข้อมูลที่จะจัดเก็บในคีย์รีจิสทรี
วิธีใช้นิพจน์ทั่วไป
คุณสามารถใช้นิพจน์ทั่วไปของไวยากรณ์ RE2 ในแท็ก
file-pathเพื่อใช้การยกเว้นหรือแอตทริบิวต์ไฟล์กับกลุ่มไฟล์ อย่าลืมใช้เครื่องหมายทับ/เป็นตัวคั่นไดเรกทอรี และใช้แบ็กสแลช\เพื่อใช้อักขระหลีกกับอักขระพิเศษของนิพจน์ทั่วไป เช่น ใช้\.เพื่อจับคู่จุดตามตัวอักษร.หรือ\dเพื่อจับคู่ตัวเลขตัวอย่างทั่วไปมีดังนี้
- จับคู่ไฟล์ทั้งหมดที่มีนามสกุลที่เฉพาะเจาะจง (เช่น .log) ในไดเรกทอรีใดก็ได้
ใช้
.*\.logเพื่อจับคู่เส้นทางใดก็ได้ที่ลงท้ายด้วย.logเช่นgame.logหรือlogs/errors.log<file-path>.*\.log</file-path>
- จับคู่ไฟล์และไดเรกทอรีย่อยทั้งหมดภายในโฟลเดอร์ที่เฉพาะเจาะจง (เช่น 'temp')
ใช้
temp/.*เพื่อจับคู่เส้นทางทั้งหมดที่ขึ้นต้นด้วยtemp/เช่นtemp/data.txtหรือtemp/saves/file.sav<file-path>temp/.*</file-path>
- จับคู่ไฟล์ที่ตรงกับรูปแบบในโฟลเดอร์ที่เฉพาะเจาะจง
ใช้
assets/level\d\.datเพื่อจับคู่assets/level1.dat,assets/level2.datแต่ ไม่จับคู่assets/other.dat<file-path>assets/level\d\.dat</file-path>
- จับคู่ชื่อโฟลเดอร์เมื่อปรากฏที่ใดก็ได้ในเส้นทาง
ใช้
.*/cache/.*เพื่อจับคู่ไฟล์ในไดเรกทอรีใดก็ได้ที่ชื่อcacheเช่นgame/cache/file.txtหรือtemp/cache/other.log<file-path>.*/cache/.*</file-path>
- จับคู่ไฟล์ที่มีนามสกุลหลายนามสกุล (เช่น .ini, .cfg, .sav)
ใช้
.*\.(ini|cfg|sav)เพื่อจับคู่ไฟล์ใดก็ได้ที่ลงท้ายด้วย.ini,.cfgหรือ.savเช่นsettings.ini,config.cfgหรือsaves/slot1.sav<file-path>.*\.(ini|cfg|sav)</file-path>
- จับคู่ไฟล์ที่มีนามสกุลที่เฉพาะเจาะจงในไดเรกทอรีที่เฉพาะเจาะจง (เช่น .ogg ใน music/ หรือ sfx/)
ใช้
(music|sfx)/.*\.oggเพื่อจับคู่ไฟล์.oggใดก็ได้ที่อยู่ในไดเรกทอรีmusic/หรือsfx/แต่ไม่อยู่ในไดเรกทอรีอื่นๆ จับคู่music/level1.oggหรือsfx/explosion.oggแต่ไม่จับคู่voice/intro.ogg<file-path>(music|sfx)/.*\.ogg</file-path>
ตัวอย่างไฟล์การกำหนดค่าการเผยแพร่ของ Play
ต่อไปนี้เป็นตัวอย่าง
play_publishing_config.xmlสำหรับเกมชื่อTestGame<?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>
เรียกใช้เครื่องมือเผยแพร่ของ Play ในบรรทัดคำสั่ง Windows หรือ Powershell โดยใช้คำสั่ง
build-bundleplaypublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
หากต้องการเขียนทับไฟล์ WAB ที่มีอยู่ซึ่งมีชื่อเดียวกัน ให้ใช้อาร์กิวเมนต์
--forceplaypublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
แทนที่ข้อมูลต่อไปนี้
PLAY_PUBLISHING_CONFIG_PATH: เส้นทางไปยังการกำหนดค่าการเผยแพร่ของ Play เช่นpath\to\play_publishing_config.xmlWAB_OUTPUT_PATH: เส้นทางไปยังไฟล์ WAB เช่นpath\to\output_bundle.wab
วิธีใช้เครื่องมือเผยแพร่ของ Play
หากคุณมี
playpublishingtool.exe,play_publishing_config.xmlและไฟล์เกมในgame_files/ในไดเรกทอรีการทำงานปัจจุบัน ให้ทำดังนี้.\ ├── game_files/ ├── play_publishing_config.xml ├── playpublishingtool.exe
หากต้องการสร้าง
pmi_bundle.wabในไดเรกทอรีเดียวกัน ให้เรียกใช้คำสั่งต่อไปนี้playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
ขณะที่เครื่องมือสร้างแพ็กเกจ คุณจะเห็นแถบความคืบหน้าในเทอร์มินัลดังนี้
Building bundle: [==== ] 40%
หากสำเร็จ คุณควรเห็นเอาต์พุตที่คล้ายกับเอาต์พุตต่อไปนี้
Building bundle: [===========] 100% Successfully built the managed install bundle at pmi_bundle.wab
ค้นหาไฟล์ WAB ในโฟลเดอร์ต่อไปนี้
.\ ├── game_files/ ├── pmi_bundle.wab ├── play_publishing_config.xml ├── playpublishingtool.exe