Publikowanie zaplanowane w Google Play

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

W przypadku zarządzanej instalacji w Google 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 Windowsa (WAB).

Zanim zaczniesz

Zintegruj pakiet SDK do gier Google Play ze swoją grą.

Pakowanie gry jako pliku WAB

Aby utworzyć plik WAB instalacji zarządzanej w Google Play, wykonaj te czynności:

  1. Pobierz narzędzie do publikowania w Google Play. To narzędzie możesz uruchomić w wierszu poleceń systemu Windows lub w Powershell.

  2. Utwórz plik konfiguracji publikowania w Google Play o dowolnej nazwie. Na przykładplay_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 zawierać co najmniej 2 segmenty (co najmniej 1 kropkę).
      • Każdy segment musi zaczynać się od litery.
      • 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 wśród wszystkich przesłanych plików WAB w przypadku Twojej gry. Przykłady: 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 z tego folderu z wyjątkiem tych, które zostały wymienione w wykluczeniach. Ścieżka może być bezwzględna lub względna względem katalogu zawierającego plik play_publishing_config.xml.

    • exclusions: (Opcjonalnie) określa ścieżki 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żka 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 dla konkretnych plików lub plików pasujących do wzorca wyrażenia regularnego.

      • FILE_ATTRIBUTE_VALUE: może przyjmować 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żywaj tej opcji w przypadku plików, które muszą zostać zaktualizowane, ale po instalacji mogą być modyfikowane na urządzeniu. Podczas aktualizacji system pobiera cały nowy plik i zastępuje nim zainstalowaną wersję. Jeśli podczas sprawdzania integralności instalacji ten plik różni się od zainstalowanej wersji, instalacja nie jest uznawana za uszkodzoną.
      • file-path: wskazuje pliki dla tego atrybutu. W każdym elemencie file-attribute możesz umieścić wiele elementów file-path. Każdą ścieżkę można przedstawić na 2 sposoby:
        • Jako ścieżka pliku: ścieżka do pliku, z którym chcesz powiązać ten atrybut.
        • Jako ciąg wyrażenia regularnego: wszystkie pliki pasujące do ciągu 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ń. Element <arguments> służy do przekazywania argumentów do pliku wykonywalnego określonego w atrybutach <launch-command>, <install-operation> lub <uninstall-operation>. Każde użycie elementu <arguments> dotyczy tylko pliku wykonywalnego, przy którym jest zdefiniowany, co pozwala określać różne argumenty dla różnych plików wykonywalnych.

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

      • install-operation: działanie, które ma zostać wykonane po zainstalowaniu gry. Możesz określić 2 rodzaje operacji instalacji: execute-fileupdate-registry.
      • uninstall-operation: działanie, które ma zostać wykonane przed odinstalowaniem gry. update-registry są automatycznie przywracane podczas odinstalowywania.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: wskazuje, czy operacja instalacji wymaga uprawnień administratora.

        • „true”: uruchom jako administrator.
        • „false”: uruchom jako bieżący użytkownik. Jest to ustawienie domyślne, jeśli nie zostanie określone.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: wskazuje, czy operacja odinstalowania wymaga uprawnień administratora.

        • „true”: uruchom jako administrator.
        • „false”: uruchom jako bieżący użytkownik. Jest to ustawienie domyślne, jeśli nie zostanie określone.
      • 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 zostać uruchomiony przed odinstalowaniem.
      • update-registry: tworzy lub aktualizuje wpis w rejestrze systemu Windows.

        • BASE_KEY: określa klucz główny, który ma być używany w rejestrze systemu Windows. Dozwolone wartości: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATAHKEY_USERS. Podczas wykonywania operacji update-registry ustaw wartość parametru requiresElevation="true" w elemencie nadrzędnym install-operation na podstawie użytego parametru baseKey:
          • HKEY_LOCAL_MACHINE lub HKEY_CURRENT_CONFIG: ustaw requiresElevation="true".
          • HKEY_CURRENT_USER:requiresElevation="true" nie jest potrzebny.
          • HKEY_CLASSES_ROOT: ustaw requiresElevation="true" tylko wtedy, gdy zapisujesz dane w sekcjach dotyczących całego komputera. Nie jest to wymagane w przypadku sekcji dotyczących poszczególnych użytkowników.
          • HKEY_USERS: zawiera profile wszystkich użytkowników. Ustaw wartość requiresElevation="true", gdy modyfikujesz profile inne niż profil bieżącego użytkownika (np. innych użytkowników lub .DEFAULT).
        • SUB_KEY_PATH: ścieżka do konkretnego klucza w rejestrze systemu Windows, zagnieżdżonego w głównym kluczu baseKey.
        • VALUE_NAME: określa nazwę wpisu danych, który chcesz zmodyfikować w wyznaczonym podkluczu.
        • REGISTRY_VALUE_TYPE: ten atrybut określa typ danych wartości zapisywanej w rejestrze. Obsługiwane wartości to STRING w przypadku ciągu znaków lub DWORD w przypadku liczby 32-bitowej.
        • VALUE_TEXT: dane do zapisania 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 zastosować wykluczenia lub atrybuty plików do grupy plików. Pamiętaj, aby używać ukośników prawych / jako separatorów katalogów i zmieniać znaczenie specjalnych znaków wyrażeń regularnych za pomocą ukośnika lewego \. Na przykład użyj znaku \., aby dopasować kropkę ., lub znaku \d, aby dopasować cyfrę.

    Oto kilka typowych przykładów:

    • Dopasowywanie wszystkich plików z określonym rozszerzeniem (np. .log) w dowolnym katalogu

      Użyj znaku .*\.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 znaku temp/.*, aby dopasować wszystkie ścieżki, które zaczynają się od temp/, np. temp/data.txt lub temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Dopasowywanie plików pasujących 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 symbolu .*/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>
    • Dopasowywanie plików 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>
    • Dopasowywanie plików z określonym rozszerzeniem w określonych katalogach (np. .ogg w music/ lub sfx/)

      Użyj znaku (music|sfx)/.*\.ogg, aby dopasować wszystkie .ogg pliki znajdujące się w katalogach music/ lub sfx/, ale nie w innych miejscach. 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 konfiguracji publikowania w Google Play

    Oto przykład 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 Google Play w wierszu poleceń systemu Windows lub w powłoce 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 Google 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 Google Play

    Jeśli w bieżącym katalogu roboczym masz pliki playpublishingtool.exe, play_publishing_config.xmlgame_files/:

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

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

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

    Podczas tworzenia pakietu w terminalu będzie widoczny pasek postępu:

    Building bundle: [====       ] 40%
    

    Jeśli operacja się powiedzie, 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