Play Yönetilen Yayınlama

Bu belgede, Play tarafından yönetilen yüklemeyi kullanarak oyununuzu PC Üzerinde Google Play Games'de nasıl yayınlayacağınız açıklanmaktadır.

Play Managed Installation ile Google Play, Windows uygulama paketi (WAB) dosyasında sağladığınız oyun dosyalarını ve meta verilerini kullanarak oyunun yüklenmesini, güncellenmesini ve kaldırılmasını yönetir.

Başlamadan önce

Google Play Games SDK'sını oyununuza entegre edin.

Oyununuzu WAB dosyası olarak paketleme

Play Managed Installation WAB dosyası oluşturmak için aşağıdaki adımları uygulayın:

  1. Play yayınlama aracını indirin. Bu aracı Windows komut satırında veya PowerShell'de çalıştırabilirsiniz.

  2. Herhangi bir adla Play yayınlama yapılandırma dosyasını oluşturun. Örneğin, aşağıdaki biçimde 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>

    Aşağıdakileri değiştirin:

    • PACKAGE_NAME: Oyununuzun paket adı. Bu, Google Play'de oyununuzla ilişkilendirilecek benzersiz tanımlayıcıdır. Örneğin, com.yourcompany.yourgame. Paket adı aşağıdaki kurallara uymalıdır:
      • En az iki segment (bir veya daha fazla nokta) içermelidir.
      • Her segment bir harfle başlamalıdır.
      • Tüm karakterler alfanümerik veya alt çizgi ([a-zA-Z0-9_]) olmalıdır.
    • VERSION_NAME: Oyunun sürüm dizesi. Bu, rastgele bir dize olabilir ancak oyununuz için yüklenen tüm WAB'lerde benzersiz olmalıdır. Örneğin: 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER: Oyun dosyalarınızı içeren kök klasörün yolu. Bu klasördeki tüm dosyalar (hariç tutulanlar hariç) pakete eklenir. Bu yol, play_publishing_config.xml dosyasını içeren dizine göre mutlak veya göreli olabilir.

    • exclusions: (İsteğe bağlı) Paketten hariç tutulacak PATH_TO_ROOT_FOLDER içindeki dosyalar için dosya yollarını veya kalıplarını belirtir. exclusions öğesine birden fazla file-path öğesi ekleyebilirsiniz. Bir yol iki şekilde gösterilebilir:

      • Dosya yolu olarak: Hariç tutulacak dosyanın yolu.
      • Normal ifade dizesi olarak: Normal ifade dizesiyle eşleşen tüm dosyalar paketin dışında tutulur. RE2 söz dizimini kullanın.
    • file-attribute: (İsteğe bağlı) Belirli dosyalar veya normal ifade deseniyle eşleşen dosyalar için özellikleri tanımlar.

      • FILE_ATTRIBUTE_VALUE: Aşağıdakilerden biri olabilir:
        • SKIP_UPDATE: Bu özellik, güncelleme sırasında dosyayı yalnızca mevcut değilse kopyalaması ve mevcut bir dosyada yapılan değişiklikleri koruması için sisteme talimat verir.
        • MODIFIED_ON_DEVICE: Güncellenmesi gereken ancak yükleme işleminden sonra cihazda değiştirilebilecek dosyalar için bunu kullanın. Sistem, güncelleme sırasında yeni dosyanın tamamını indirir ve yüklü sürümün üzerine yazar. Bu dosya, yükleme bütünlüğü denetimleri sırasında yüklü sürümden farklıysa yükleme bozuk olarak kabul edilmez.
      • file-path: Bu özellik için dosyaları tanımlar. Her file-attribute öğesine birden fazla file-path öğesi ekleyebilirsiniz. Her yol iki şekilde gösterilebilir:
        • Dosya yolu olarak: Bu özelliği ilişkilendirmek istediğiniz dosyanın yolu.
        • Normal ifade dizesi olarak: Normal ifade dizesiyle eşleşen tüm dosyalar özellik değeriyle ilişkilendirilir. RE2 söz dizimini kullanın.
    • PATH_TO_LAUNCH_FILE: Oyunu başlatmak için kullanılan yürütülebilir dosyanın yolu.

    • ARGUMENTS: (İsteğe bağlı) Komut satırı bağımsız değişkenleri. <arguments> öğesi, <launch-command>, <install-operation> veya <uninstall-operation> içinde belirtilen bir yürütülebilir dosyaya bağımsız değişkenler iletmek için kullanılır. <arguments> öğesinin her kullanımı yalnızca tanımlandığı yürütülebilir dosya için geçerlidir. Bu sayede, farklı yürütülebilir dosyalar için farklı bağımsız değişkenler belirtebilirsiniz.

      • Bir yürütülebilir dosyanın birden fazla bağımsız değişkeni varsa bunları boşlukla ayırın.
      • Yürütülebilir dosya gerektiriyorsa bağımsız değişkenlerin başına -- veya - ekleyin. Örnek:
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations: (İsteğe bağlı) Oyun yükleme veya kaldırma sırasında gerçekleştirilecek özel işlemler.

      • install-operation: Oyun yüklendiğinde çalıştırılacak bir işlem. İki tür yükleme işlemi belirtebilirsiniz: execute-file ve update-registry.
      • uninstall-operation: Oyun kaldırılmadan önce çalıştırılacak bir işlem. update-registry işlemleri, kaldırma sırasında otomatik olarak geri alınır.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: Yükleme işleminin yönetici ayrıcalıklarıyla çalıştırılması gerekip gerekmediğini gösterir.

        • "true": Yönetici olarak çalıştırın.
        • "false": Geçerli kullanıcı olarak çalıştır. Belirtilmezse varsayılan değerdir.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: Kaldırma işleminin yönetici ayrıcalıklarıyla çalıştırılması gerekip gerekmediğini gösterir.

        • "true": Yönetici olarak çalıştırın.
        • "false": Geçerli kullanıcı olarak çalıştır. Belirtilmezse varsayılan değerdir.
      • operation-identifier: Bir install-operation öğesini tanımlamak için kullanılan benzersiz dize.

      • execute-file: Yürütülebilir bir dosyayı çalıştırır.

        • PATH_TO_INSTALL_EXECUTE_FILE: Yükleme sırasında çalıştırılacak bir yürütülebilir dosyanın yolu.
        • PATH_TO_UNINSTALL_EXECUTE_FILE: Kaldırma işleminden önce çalıştırılacak bir yürütülebilir dosyanın yolu.
      • update-registry: Bir Windows kayıt defteri girişi oluşturur veya günceller.

        • BASE_KEY: Windows kayıt defterinde kullanılacak kök anahtarı tanımlar. Kabul edilen değerler: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA ve HKEY_USERS. Bir update-registry işlemi gerçekleştirirken kullanılan baseKey'ye göre üst öğede install-operation requiresElevation="true" ayarlayın:
          • HKEY_LOCAL_MACHINE veya HKEY_CURRENT_CONFIG: requiresElevation="true" olarak ayarlayın.
          • HKEY_CURRENT_USER: requiresElevation="true" gerekli değil.
          • HKEY_CLASSES_ROOT: requiresElevation="true" yalnızca makine genelindeki bölümlere yazarken ayarlayın. Kullanıcıya özel bölümler için gerekli değildir.
          • HKEY_USERS: Tüm kullanıcıların profillerini içerir. Mevcut kullanıcının profili dışındaki profilleri (ör. diğer kullanıcılar veya .DEFAULT) değiştirirken requiresElevation="true" değerini ayarlayın.
        • SUB_KEY_PATH: Bu, Windows kayıt defterindeki ana baseKey altında yer alan belirli bir anahtarın yolunu gösterir.
        • VALUE_NAME: Bu, belirlenen alt anahtar içinde değiştirmek istediğiniz veri girişinin adını belirtir.
        • REGISTRY_VALUE_TYPE: Bu özellik, kayıt defterine yazılan değerin veri türünü belirtir. Dize için STRING, 32 bit sayı için DWORD değerleri desteklenir.
        • VALUE_TEXT: Kayıt defteri anahtarında depolanacak veriler.

    Normal ifadeleri kullanma

    Bir grup dosyaya hariç tutma veya dosya özellikleri uygulamak için file-path etiketlerinde RE2 söz dizimi normal ifadelerini kullanabilirsiniz. Dizin ayırıcıları için düz eğik çizgi / kullanmayı ve özel düzenli ifade karakterlerini ters eğik çizgi \ ile kaçırmayı unutmayın. Örneğin, gerçek bir nokta . ile eşleştirmek için \., bir rakamla eşleştirmek için \d kullanın.

    Aşağıda, bazı sık rastlanan örnekler verilmiştir:

    • Herhangi bir dizindeki belirli bir uzantıya (ör. .log) sahip tüm dosyaları eşleştirme

      .log ile biten tüm yolları (ör. game.log veya logs/errors.log) eşleştirmek için .*\.log kullanın.

      <file-path>.*\.log</file-path>
    • Belirli bir klasördeki (örneğin, "temp") tüm dosyaları ve alt dizinleri eşleştirme

      temp/ ile başlayan tüm yolları (ör. temp/data.txt veya temp/saves/file.sav) eşleştirmek için temp/.* kullanın.

      <file-path>temp/.*</file-path>
    • Belirli bir klasördeki bir kalıpla eşleşen dosyaları eşleştirme

      assets/level1.dat ve assets/level2.dat ile eşleşmek için assets/level\d\.dat kullanın ancak assets/other.dat ile eşleşmeyin.

      <file-path>assets/level\d\.dat</file-path>
    • Yolun herhangi bir yerinde görünen klasör adını eşleştirme

      .*/cache/.*, game/cache/file.txt veya temp/cache/other.log gibi cache adlı dizinlerdeki dosyaları eşleştirmek için .*/cache/.* kullanın.

      <file-path>.*/cache/.*</file-path>
    • Dosyaları çeşitli uzantılarla eşleştirme (ör. .ini, .cfg, .sav)

      .*\.(ini|cfg|sav) kullanarak .ini, .cfg veya .sav ile biten tüm dosyaları (ör. settings.ini, config.cfg veya saves/slot1.sav) eşleştirin.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Belirli dizinlerde belirli bir uzantıya sahip dosyaları eşleştirme (örneğin, music/ veya sfx/ dizinindeki .ogg dosyaları)

      (music|sfx)/.*\.ogg, music/ veya sfx/ dizinlerinin altında bulunan ancak başka bir yerde bulunmayan tüm .ogg dosyalarını eşleştirmek için kullanılır. music/level1.ogg veya sfx/explosion.ogg ile eşleşir ancak voice/intro.ogg ile eşleşmez.

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

    Örnek Play yayınlama yapılandırma dosyası

    TestGame adlı bir oyun için play_publishing_config.xml örneğini aşağıda görebilirsiniz:

    <?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. build-bundle komutunu kullanarak Play yayınlama aracını Windows komut satırında veya PowerShell'de çalıştırın:

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

    Aynı ada sahip mevcut bir WAB dosyasının üzerine yazmak için --force bağımsız değişkenini kullanın.

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

    Aşağıdakileri değiştirin:

    • PLAY_PUBLISHING_CONFIG_PATH: Play yayınlama yapılandırmasının yolu. Örneğin, path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH: WAB dosyasının yolu. Örneğin, path\to\output_bundle.wab.

    Play yayınlama aracını kullanma

    Mevcut çalışma dizininde playpublishingtool.exe, play_publishing_config.xml ve oyun dosyalarınız game_files/ varsa:

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

    Aynı dizinde pmi_bundle.wab oluşturmak için şu komutu çalıştırın:

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

    Araç paketi oluştururken terminalde bir ilerleme çubuğu görürsünüz:

    Building bundle: [====       ] 40%
    

    İşlem başarılı olduğunda şuna benzer bir çıkış alırsınız:

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

    WAB dosyasını şu klasörde bulabilirsiniz:

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