การเผยแพร่ที่จัดการของ Play

เอกสารนี้จะแสดงวิธีเผยแพร่เกมใน Google Play Games บน PC โดยใช้การติดตั้งที่จัดการโดย Play

เมื่อใช้การติดตั้งที่จัดการโดย Play ทาง Google Play จะจัดการการติดตั้ง การอัปเดต และการถอนการติดตั้งเกมโดยใช้ไฟล์เกมและข้อมูลเมตาที่คุณระบุในไฟล์ Windows App Bundle (WAB)

ก่อนเริ่มต้น

ผสานรวม Google Play Games SDK เข้ากับเกม

แพ็กเกจเกมเป็นไฟล์ WAB

หากต้องการสร้างไฟล์ WAB สำหรับการติดตั้งที่จัดการโดย Play ให้ทำตามขั้นตอนต่อไปนี้

  1. ดาวน์โหลดเครื่องมือเผยแพร่ของ Play คุณสามารถเรียกใช้เครื่องมือนี้ในบรรทัดคำสั่ง Windows หรือ Powershell

  2. สร้างไฟล์การกำหนดค่าการเผยแพร่ของ 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.rc1
    • PATH_TO_ROOT_FOLDER: เส้นทางไปยังโฟลเดอร์รูทที่มีไฟล์เกม ระบบจะเพิ่มไฟล์ทั้งหมดในโฟลเดอร์นี้ลงในแพ็กเกจ ยกเว้นไฟล์ที่ระบุไว้ในส่วนการยกเว้น เส้นทางนี้อาจเป็นเส้นทาง สัมบูรณ์ หรือเส้นทาง สัมพัทธ์ กับไดเรกทอรีที่มีไฟล์ play_publishing_config.xml

    • exclusions: (ไม่บังคับ) ระบุเส้นทางไฟล์หรือรูปแบบของไฟล์ภายใน 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-registry
      • uninstall-operation: การดำเนินการที่จะเรียกใช้ก่อนที่จะถอนการติดตั้งเกม ระบบจะยกเลิกการดำเนินการ update-registry โดยอัตโนมัติระหว่างการถอนการติดตั้ง
      • INSTALL_OPERATION_REQUIRES_ELEVATION: ระบุว่าการดำเนินการติดตั้งต้องเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบหรือไม่

        • "true": เรียกใช้ในฐานะผู้ดูแลระบบ
        • "false": เรียกใช้ในฐานะผู้ใช้ปัจจุบัน ซึ่งเป็นค่าเริ่มต้นหากไม่ได้ระบุ
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: ระบุว่าการดำเนินการถอนการติดตั้งต้องเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบหรือไม่

        • "true": เรียกใช้ในฐานะผู้ดูแลระบบ
        • "false": เรียกใช้ในฐานะผู้ใช้ปัจจุบัน ซึ่งเป็นค่าเริ่มต้นหากไม่ได้ระบุ
      • operation-identifier: สตริงที่ไม่ซ้ำกันเพื่อระบุ install-operation

      • execute-file: เรียกใช้ไฟล์ปฏิบัติการ

        • PATH_TO_INSTALL_EXECUTE_FILE: เส้นทางไปยังไฟล์ปฏิบัติการที่จะเรียกใช้ระหว่างการติดตั้ง
        • PATH_TO_UNINSTALL_EXECUTE_FILE: เส้นทางไปยังไฟล์ปฏิบัติการที่จะเรียกใช้ก่อนการถอนการติดตั้ง
      • update-registry: สร้างหรืออัปเดตรายการรีจิสทรีของ Windows

        • BASE_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>
  3. เรียกใช้เครื่องมือเผยแพร่ของ Play ในบรรทัดคำสั่ง Windows หรือ Powershell โดยใช้คำสั่ง build-bundle

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
    

    หากต้องการเขียนทับไฟล์ WAB ที่มีอยู่ซึ่งมีชื่อเดียวกัน ให้ใช้อาร์กิวเมนต์ --force

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
    

    แทนที่ข้อมูลต่อไปนี้

    • PLAY_PUBLISHING_CONFIG_PATH: เส้นทางไปยังการกำหนดค่าการเผยแพร่ของ Play เช่น path\to\play_publishing_config.xml
    • WAB_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