В этом документе показано, как опубликовать игру в Google Play Games на ПК с помощью Play Managed Installation.
С помощью Play Managed Installation Google Play управляет установкой, обновлением и удалением игры, используя игровые файлы и метаданные, которые вы предоставляете в файле Windows App Bundle (WAB).
Прежде чем начать
Интегрируйте Google Play Games SDK в свою игру.
Упакуйте свою игру в WAB-файл
Чтобы создать WAB-файл Play Managed Installation, выполните следующие действия:
Загрузите инструмент публикации 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. Имя пакета должно соответствовать следующим правилам:- Он должен состоять как минимум из двух сегментов (одной или нескольких точек).
- Каждый сегмент должен начинаться с буквы.
- Все символы должны быть буквами, цифрами или подчеркиванием (
[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>
-
Запустите инструмент публикации 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
-