প্লে ম্যানেজড পাবলিশিং

এই ডকুমেন্টটি আপনাকে দেখায় কিভাবে Play Managed Installation ব্যবহার করে PC তে Google Play Games-এ আপনার গেমটি প্রকাশ করবেন।

Play Managed Installation এর মাধ্যমে, Google Play আপনার Windows অ্যাপ বান্ডেল (WAB) ফাইলে প্রদত্ত গেম ফাইল এবং মেটাডেটা ব্যবহার করে গেমটির ইনস্টলেশন, আপডেট এবং আনইনস্টলেশন পরিচালনা করে।

শুরু করার আগে

আপনার গেমের সাথে Google Play Games SDK ইন্টিগ্রেট করুন।

আপনার গেমটি একটি WAB ফাইল হিসেবে প্যাকেজ করুন।

একটি Play Managed Installation WAB ফাইল তৈরি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. প্লে পাবলিশিং টুলটি ডাউনলোড করুন। আপনি এই টুলটি উইন্ডোজ কমান্ড লাইন অথবা পাওয়ারশেলে চালাতে পারেন।

  2. যেকোনো নামে Play publishing কনফিগারেশন ফাইল তৈরি করুন। উদাহরণস্বরূপ, 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 উপাদান অন্তর্ভুক্ত করতে পারেন। প্রতিটি পথ দুটি উপায়ের একটিতে উপস্থাপন করা যেতে পারে:
        • ফাইল পাথ হিসেবে : এই অ্যাট্রিবিউটটি যে ফাইলের সাথে যুক্ত করতে হবে তার পাথ।
        • একটি regex স্ট্রিং হিসেবে : রেগুলার এক্সপ্রেশন স্ট্রিংয়ের সাথে মেলে এমন সমস্ত ফাইল অ্যাট্রিবিউট মানের সাথে যুক্ত। RE2 সিনট্যাক্স ব্যবহার করুন।
    • PATH_TO_LAUNCH_FILE : গেমটি চালু করতে ব্যবহৃত এক্সিকিউটেবল ফাইলের পথ।

    • ARGUMENTS : (ঐচ্ছিক) কমান্ড-লাইন আর্গুমেন্ট। <launch-command> , <install-operation> , অথবা <uninstall-operation> এ নির্দিষ্ট করা এক্সিকিউটেবল ফাইলে আর্গুমেন্ট পাস করার জন্য <arguments> এলিমেন্ট ব্যবহার করা হয়। <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 : একটি উইন্ডোজ রেজিস্ট্রি এন্ট্রি তৈরি বা আপডেট করে।

        • BASE_KEY : উইন্ডোজ রেজিস্ট্রিতে ব্যবহৃত রুট কী নির্ধারণ করে। গৃহীত মান: HKEY_CLASSES_ROOT , HKEY_CURRENT_CONFIG , HKEY_CURRENT_USER , HKEY_LOCAL_MACHINE , HKEY_PERFORMANCE_DATA , এবং HKEY_USERSupdate-registry অপারেশন করার সময়, ব্যবহৃত baseKey উপর ভিত্তি করে প্যারেন্ট install-operation requiresElevation="true" সেট করুন:
          • HKEY_LOCAL_MACHINE অথবা HKEY_CURRENT_CONFIG : requiresElevation="true" সেট করুন।
          • HKEY_CURRENT_USER : requiresElevation="true" প্রয়োজন নেই।
          • HKEY_CLASSES_ROOT : শুধুমাত্র মেশিন-ওয়াইড বিভাগে লেখার ক্ষেত্রে requiresElevation="true" সেট করুন; ব্যবহারকারী-নির্দিষ্ট বিভাগের জন্য এটি প্রয়োজন হয় না।
          • HKEY_USERS : সকল ব্যবহারকারীর জন্য প্রোফাইল ধারণ করে। বর্তমান ব্যবহারকারীর (যেমন, অন্যান্য ব্যবহারকারী বা .DEFAULT ) ব্যতীত অন্য ব্যবহারকারীর প্রোফাইল পরিবর্তন করার সময় requiresElevation="true" সেট করুন।
        • SUB_KEY_PATH : এটি উইন্ডোজ রেজিস্ট্রির মধ্যে একটি নির্দিষ্ট কী-এর পথকে প্রতিনিধিত্ব করে, যা main baseKey অধীনে নেস্টেড থাকে।
        • VALUE_NAME : এটি নির্ধারিত সাব-কী-র মধ্যে আপনি যে ডেটা এন্ট্রিটি পরিবর্তন করতে চান তার নাম নির্দিষ্ট করে।
        • REGISTRY_VALUE_TYPE : এই বৈশিষ্ট্যটি রেজিস্ট্রিতে লেখা মানের ডেটা টাইপ নির্দিষ্ট করে। সমর্থিত মানগুলি হল একটি স্ট্রিংয়ের জন্য STRING এবং একটি 32-বিট সংখ্যার জন্য DWORD
        • VALUE_TEXT : রেজিস্ট্রি কীতে সংরক্ষণ করা ডেটা।

    রেগুলার এক্সপ্রেশন কিভাবে ব্যবহার করবেন

    ফাইলের একটি গ্রুপে এক্সক্লুশন বা ফাইল অ্যাট্রিবিউট প্রয়োগ করতে আপনি file-path ট্যাগগুলিতে RE2 সিনট্যাক্স রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন। ডিরেক্টরি সেপারেটরের জন্য ফরোয়ার্ড স্ল্যাশ / ব্যবহার করতে ভুলবেন না, এবং ব্যাকস্ল্যাশ দিয়ে বিশেষ রেগুলার এক্সপ্রেশন অক্ষর এড়িয়ে যেতে \ ব্যবহার করুন। উদাহরণস্বরূপ, একটি আক্ষরিক বিন্দু মেলাতে \. . ব্যবহার করুন। , অথবা একটি অঙ্ক মেলাতে \d ব্যবহার করুন।

    এখানে কিছু সাধারণ উদাহরণ দেওয়া হল:

    • যেকোনো ডিরেক্টরিতে একটি নির্দিষ্ট এক্সটেনশন (উদাহরণস্বরূপ, .log) সহ সমস্ত ফাইল মেলান

      .log দিয়ে শেষ হওয়া যেকোনো পাথ, যেমন game.log অথবা logs/errors.log , মেলাতে .*\.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>
    • নির্দিষ্ট ডিরেক্টরিতে একটি নির্দিষ্ট এক্সটেনশনের সাথে ফাইলগুলি মেলান (উদাহরণস্বরূপ, music/ অথবা sfx/-এ .ogg)

      (music|sfx)/.*\.ogg ব্যবহার করে music/ অথবা sfx/ ডিরেক্টরির অধীনে থাকা যেকোনো .ogg ফাইলের সাথে মিল করুন, কিন্তু অন্য কোথাও নয়। music/level1.ogg অথবা sfx/explosion.ogg এর সাথে মিলিত হয়, কিন্তু voice/intro.ogg সাথে নয়।

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

    উদাহরণ: প্লে পাবলিশিং কনফিগারেশন ফাইল

    এখানে TestGame নামক একটি গেমের play_publishing_config.xml এর একটি উদাহরণ দেওয়া হল:

    <?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 কমান্ড ব্যবহার করে Windows কমান্ড লাইন অথবা Powershell-এ Play publishing টুলটি চালান:

    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 : প্লে পাবলিশিং কনফিগারেশনের পথ। উদাহরণস্বরূপ, path\to\play_publishing_config.xml
    • WAB_OUTPUT_PATH : WAB ফাইলের পাথ। উদাহরণস্বরূপ, path\to\output_bundle.wab

    প্লে পাবলিশিং টুল কীভাবে ব্যবহার করবেন

    যদি আপনার বর্তমান কার্যকরী ডিরেক্টরিতে 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