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

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

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

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

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

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

Для создания файла WAB с управляемой установкой Play выполните следующие действия:

  1. Загрузите инструмент для публикации в Play Store . Вы можете запустить этот инструмент в командной строке Windows или PowerShell.

  2. Создайте файл конфигурации публикации в Play Store с любым именем. Например, 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 : Данные, которые будут храниться в ключе реестра.

    Как использовать регулярные выражения

    В тегах file-path можно использовать регулярные выражения синтаксиса RE2 для применения исключений или атрибутов к группе файлов. Не забудьте использовать косые черты / для разделителей каталогов и экранировать специальные символы регулярных выражений обратной косой чертой \ . Например, используйте \. для сопоставления точки . или \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 Store

    Если у вас есть 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