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