Publikowanie zaplanowane w Google Play

Z tego dokumentu dowiesz się, jak opublikować grę w Grach Google Play na PC za pomocą instalacji zarządzanej przez Play.

W przypadku instalacji zarządzanej przez Play Google Play zarządza instalacją, aktualizacją i odinstalowywaniem gry za pomocą plików gry i metadanych, które podajesz w pliku pakietu aplikacji na Windows (WAB).

Zanim zaczniesz

Zintegruj pakiet SDK Gier Google Play ze swoją grą.

Spakuj grę jako plik WAB

Aby utworzyć plik WAB instalacji zarządzanej przez Play:

  1. Pobierz narzędzie do publikowania w Play. Możesz uruchomić to narzędzie w wierszu poleceń Windows lub w Powershell.

  2. Utwórz plik konfiguracyjny publikowania w Play o dowolnej nazwie. Na przykład play_publishing_config.xml w tym formacie:

    <?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>

    Zastąp te elementy:

    • PACKAGE_NAME: nazwa pakietu gry. Jest to unikalny identyfikator, który będzie powiązany z Twoją grą w Google Play. Na przykład com.yourcompany.yourgame. Nazwa pakietu musi być zgodna z tymi regułami:
      • Musi mieć co najmniej 2 segmenty (1 lub więcej kropek).
      • Każdy segment musi zaczynać się literą.
      • Wszystkie znaki muszą być alfanumeryczne lub podkreśleniem ([a-zA-Z0-9_]).
    • VERSION_NAME: ciąg znaków wersji gry. Może to być dowolny ciąg znaków, ale musi być unikalny we wszystkich przesłanych plikach WAB Twojej gry. Na przykład: 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER: ścieżka do folderu głównego zawierającego pliki gry. Do pakietu zostaną dodane wszystkie pliki w tym folderze z wyjątkiem tych, które zostały wymienione w wykluczeniach. Ta ścieżka może być bezwzględna lub względna w stosunku do katalogu zawierającego plik play_publishing_config.xml.

    • exclusions: (opcjonalnie) określa ścieżki plików lub wzorce plików w PATH_TO_ROOT_FOLDER, które mają zostać wykluczone z pakietu. W elemencie exclusions możesz umieścić kilka elementów file-path. Ścieżkę można przedstawić na 2 sposoby:

      • Jako ścieżkę pliku: ścieżka do pliku, który ma zostać wykluczony.
      • Jako ciąg znaków wyrażenia regularnego: wszystkie pliki pasujące do ciągu znaków wyrażenia regularnego są wykluczane z pakietu. Użyj składni RE2.
    • file-attribute: (opcjonalnie) określa atrybuty konkretnych plików lub plików pasujących do wzorca wyrażenia regularnego.

      • FILE_ATTRIBUTE_VALUE: może mieć jedną z tych wartości:
        • SKIP_UPDATE: podczas aktualizacji ten atrybut informuje system, aby skopiował plik tylko wtedy, gdy nie jest on jeszcze obecny, zachowując wszelkie zmiany w istniejącym pliku.
        • MODIFIED_ON_DEVICE: użyj tej opcji w przypadku plików, które muszą zostać zaktualizowane, ale po instalacji mogą zostać zmodyfikowane na urządzeniu. Podczas aktualizacji system pobiera cały nowy plik i zastępuje nim zainstalowaną wersję. Jeśli ten plik różni się od zainstalowanej wersji podczas sprawdzania integralności instalacji, instalacja nie jest uznawana za uszkodzoną.
      • file-path: identyfikuje pliki dla tego atrybutu. W każdym elemencie file-attribute możesz umieścić kilka elementów file-path. Każdą ścieżkę można przedstawić na 2 sposoby:
        • Jako ścieżkę pliku: ścieżka do pliku, z którym ma być powiązany ten atrybut.
        • Jako ciąg znaków wyrażenia regularnego: wszystkie pliki pasujące do ciągu znaków wyrażenia regularnego są powiązane z wartością atrybutu. Użyj składni RE2.
    • PATH_TO_LAUNCH_FILE: ścieżka do pliku wykonywalnego używanego do uruchamiania gry.

    • ARGUMENTS: (opcjonalnie) argumenty wiersza poleceń. Elementu <arguments> używa się do przekazywania argumentów do pliku wykonywalnego określonego w <launch-command>, <install-operation>, lub <uninstall-operation>. Każde użycie elementu <arguments> dotyczy tylko pliku wykonywalnego, obok którego jest zdefiniowany, co pozwala określić różne argumenty dla różnych plików wykonywalnych.

      • Jeśli plik wykonywalny ma kilka argumentów, rozdziel je spacjami.
      • Jeśli plik wykonywalny tego wymaga, dodaj przed argumentami -- lub -. Przykład:
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations: (opcjonalnie) niestandardowe działania, które mają być wykonywane podczas instalacji lub odinstalowywania gry.

      • install-operation: działanie, które ma być wykonywane podczas instalacji gry. Możesz określić 2 typy operacji instalacji: execute-file i update-registry.
      • uninstall-operation: działanie, które ma być wykonywane przed odinstalowaniem gry. Operacje update-registry są automatycznie przywracane podczas odinstalowywania.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: wskazuje, czy operacja instalacji musi być wykonywana z uprawnieniami administratora.

        • „true”: uruchom jako administrator.
        • „false”: uruchom jako bieżący użytkownik. Jest to wartość domyślna, jeśli nie została określona.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: wskazuje, czy operacja odinstalowywania musi być wykonywana z uprawnieniami administratora.

        • „true”: uruchom jako administrator.
        • „false”: uruchom jako bieżący użytkownik. Jest to wartość domyślna, jeśli nie została określona.
      • operation-identifier: unikalny ciąg znaków identyfikujący install-operation.

      • execute-file: uruchamia plik wykonywalny.

        • PATH_TO_INSTALL_EXECUTE_FILE: ścieżka do pliku wykonywalnego, który ma być uruchamiany podczas instalacji.
        • PATH_TO_UNINSTALL_EXECUTE_FILE: ścieżka do pliku wykonywalnego, który ma być uruchamiany przed odinstalowaniem.
      • update-registry: tworzy lub aktualizuje wpis w rejestrze Windows.

        • BASE_KEY: określa klucz główny, który ma być używany w rejestrze Windows. Dopuszczalne wartości: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA i HKEY_USERS. Podczas wykonywania operacji update-registry ustaw requiresElevation="true" w nadrzędnej install-operation na podstawie używanego baseKey używanego:
          • HKEY_LOCAL_MACHINE lub HKEY_CURRENT_CONFIG: Ustaw requiresElevation="true".
          • HKEY_CURRENT_USER: requiresElevation="true" nie jest wymagane.
          • HKEY_CLASSES_ROOT: ustaw requiresElevation="true" tylko wtedy, gdy zapisujesz w sekcjach obejmujących cały komputer; nie jest to wymagane w przypadku sekcji specyficznych dla użytkownika.
          • HKEY_USERS: zawiera profile wszystkich użytkowników. Ustaw requiresElevation="true" podczas modyfikowania profili innych niż profil bieżącego użytkownika (np. innych użytkowników lub .DEFAULT).
        • SUB_KEY_PATH: ścieżka do konkretnego klucza w rejestrze Windows, zagnieżdżonego w głównym baseKey.
        • VALUE_NAME: nazwa wpisu danych, który chcesz zmodyfikować w wyznaczonym podkluczu.
        • REGISTRY_VALUE_TYPE: atrybut określający typ danych wartości zapisywanej w rejestrze. Obsługiwane wartości to STRING w przypadku ciągu znaków i DWORD w przypadku liczby 32-bitowej.
        • VALUE_TEXT: dane, które mają być przechowywane w kluczu rejestru.

    Jak używać wyrażeń regularnych

    W tagach file-path możesz używać wyrażeń regularnych w składni RE2, aby stosować wykluczenia lub atrybuty plików do grupy plików. Pamiętaj, aby używać ukośników / jako separatorów katalogów i aby zmieniać znaczenie znaków specjalnych wyrażeń regularnych za pomocą ukośnika odwrotnego \. Na przykład użyj \., aby dopasować kropkę ., lub \d, aby dopasować cyfrę.

    Oto kilka typowych przykładów:

    • Dopasuj wszystkie pliki z określonym rozszerzeniem (np. .log) w dowolnym katalogu

      Użyj .*\.log, aby dopasować dowolną ścieżkę kończącą się na .log, np. game.log lub logs/errors.log.

      <file-path>.*\.log</file-path>
    • Dopasuj wszystkie pliki i podkatalogi w określonym folderze (np. „temp”)

      Użyj temp/.*, aby dopasować wszystkie ścieżki zaczynające się od temp/, np. temp/data.txt lub temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Dopasuj pliki pasujące do wzorca w określonym folderze

      Użyj assets/level\d\.dat, aby dopasować assets/level1.dat, assets/level2.dat, ale nie assets/other.dat.

      <file-path>assets/level\d\.dat</file-path>
    • Dopasuj nazwę folderu, gdy pojawi się w dowolnym miejscu ścieżki

      Użyj .*/cache/.*, aby dopasować pliki w dowolnym katalogu o nazwie cache, np. game/cache/file.txt lub temp/cache/other.log.

      <file-path>.*/cache/.*</file-path>
    • Dopasuj pliki z jednym z kilku rozszerzeń (np. .ini, .cfg, .sav)

      Użyj .*\.(ini|cfg|sav), aby dopasować dowolny plik kończący się na .ini, .cfg lub .sav, np. settings.ini, config.cfg lub saves/slot1.sav.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Dopasuj pliki z określonym rozszerzeniem w określonych katalogach (np. .ogg w music/ lub sfx/)

      Użyj (music|sfx)/.*\.ogg, aby dopasować wszystkie .ogg pliki, które znajdują się w katalogach music/ lub sfx/, ale nie w innych. Pasuje do music/level1.ogg lub sfx/explosion.ogg, ale nie do voice/intro.ogg.

      <file-path>(music|sfx)/.*\.ogg</file-path>

    Przykładowy plik konfiguracyjny publikowania w Play

    Oto przykład pliku play_publishing_config.xml dla gry o nazwie 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. Uruchom narzędzie do publikowania w Play w wierszu poleceń Windows lub w Powershell za pomocą polecenia build-bundle:

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

    Aby zastąpić istniejący plik WAB o tej samej nazwie, użyj argumentu --force.

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

    Zastąp te elementy:

    • PLAY_PUBLISHING_CONFIG_PATH: ścieżka do konfiguracji publikowania w Play. Na przykład path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH: ścieżka do pliku WAB. Na przykład path\to\output_bundle.wab.

    Jak korzystać z narzędzia do publikowania w Play

    Jeśli w bieżącym katalogu roboczym masz pliki playpublishingtool.exe, play_publishing_config.xml i pliki gry w game_files/:

    .\
    ├── game_files/
    ├── play_publishing_config.xml
    ├── playpublishingtool.exe
    

    Aby utworzyć plik pmi_bundle.wab w tym samym katalogu, uruchom:

    playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
    

    Gdy narzędzie będzie tworzyć pakiet, w terminalu zobaczysz pasek postępu:

    Building bundle: [====       ] 40%
    

    Po zakończeniu zobaczysz dane wyjściowe podobne do tych:

    Building bundle: [===========] 100%
    Successfully built the managed install bundle at pmi_bundle.wab
    

    Znajdź plik WAB w folderze:

      .\
      ├── game_files/
      ├── pmi_bundle.wab
      ├── play_publishing_config.xml
      ├── playpublishingtool.exe