เอกสารนี้จะแสดงวิธีเผยแพร่เกมใน 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-bundleดังนี้playpublishingtool.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