এই ডকুমেন্টটি আপনাকে দেখায় কিভাবে Play Managed Installation ব্যবহার করে PC তে Google Play Games-এ আপনার গেমটি প্রকাশ করবেন।
Play Managed Installation এর মাধ্যমে, Google Play আপনার Windows অ্যাপ বান্ডেল (WAB) ফাইলে প্রদত্ত গেম ফাইল এবং মেটাডেটা ব্যবহার করে গেমটির ইনস্টলেশন, আপডেট এবং আনইনস্টলেশন পরিচালনা করে।
শুরু করার আগে
আপনার গেমের সাথে Google Play Games SDK ইন্টিগ্রেট করুন।
আপনার গেমটি একটি WAB ফাইল হিসেবে প্যাকেজ করুন।
একটি Play Managed Installation WAB ফাইল তৈরি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
প্লে পাবলিশিং টুলটি ডাউনলোড করুন। আপনি এই টুলটি উইন্ডোজ কমান্ড লাইন অথবা পাওয়ারশেলে চালাতে পারেন।
যেকোনো নামে 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_USERS।update-registryঅপারেশন করার সময়, ব্যবহৃতbaseKeyউপর ভিত্তি করে প্যারেন্টinstall-operationrequiresElevation="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: এটি উইন্ডোজ রেজিস্ট্রির মধ্যে একটি নির্দিষ্ট কী-এর পথকে প্রতিনিধিত্ব করে, যা mainbaseKeyঅধীনে নেস্টেড থাকে। -
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>
-
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
-