Play Управляемая публикация

В этом документе показано, как опубликовать игру в Google Play Games на ПК с помощью Play Managed Installation.

С помощью Play Managed Installation Google Play управляет установкой, обновлением и удалением игры, используя игровые файлы и метаданные, которые вы предоставляете в файле Windows App Bundle (WAB).

Прежде чем начать

Интегрируйте Google Play Games SDK в свою игру.

Упакуйте свою игру в WAB-файл

Чтобы создать WAB-файл Play Managed Installation, выполните следующие действия:

  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 . Имя пакета должно соответствовать следующим правилам:
      • Он должен состоять как минимум из двух сегментов (одной или нескольких точек).
      • Каждый сегмент должен начинаться с буквы.
      • Все символы должны быть буквами, цифрами или подчеркиванием ( [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 , которые следует исключить из пакета. В элемент exclusions можно включить несколько элементов file-path . Путь может быть представлен одним из двух способов:

      • Как путь к файлу : Путь к файлу, который требуется исключить.
      • В виде строки регулярного выражения : все файлы, соответствующие строке регулярного выражения, исключаются из пакета. Используйте синтаксис RE2 .
    • file-attribute : (Необязательно) Определяет атрибуты для конкретных файлов или файлов, соответствующих шаблону регулярного выражения.

      • FILE_ATTRIBUTE_VALUE : Может быть одним из следующих:
        • SKIP_UPDATE : во время обновления этот атрибут сообщает системе копировать файл только в том случае, если он еще не существует, сохраняя любые изменения в существующем файле.
        • MODIFIED_ON_DEVICE : Используйте этот параметр для файлов, которые необходимо обновить, но которые могут быть изменены на устройстве после установки. Система загружает полный новый файл и перезаписывает установленную версию во время обновления. Если этот файл отличается от установленной версии во время проверки целостности установки, установка не считается повреждённой.
      • file-path : определяет файлы для этого атрибута. В каждый элемент file-attribute можно включить несколько элементов file-path . Каждый путь может быть представлен одним из двух способов:
        • Как путь к файлу : путь к файлу, с которым следует связать этот атрибут.
        • В виде строки регулярного выражения : все файлы, соответствующие строке регулярного выражения, связываются со значением атрибута. Используйте синтаксис RE2 .
    • PATH_TO_LAUNCH_FILE : Путь к исполняемому файлу, используемому для запуска игры.

    • ARGUMENTS : (Необязательно) Аргументы командной строки. Элемент <arguments> используется для передачи аргументов исполняемому файлу, указанному в <launch-command> , <install-operation> или <uninstall-operation> . Каждое использование элемента <arguments> применяется только к исполняемому файлу, рядом с которым он определён, что позволяет указывать разные аргументы для разных исполняемых файлов.

      • Если исполняемый файл имеет несколько аргументов, разделите их пробелом.
      • Добавляйте к аргументам символ -- или - , если это требуется для исполняемого файла. Пример:
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations : (Необязательно) Пользовательские действия, выполняемые во время установки или удаления игры.

      • install-operation : действие, выполняемое при установке игры. Можно указать два типа операций установки: 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