জেনেরিক সিস্টেম ইমেজ (GSI) হল Android ডিভাইসের জন্য অ্যাডজাস্ট করা কনফিগারেশন সহ একটি সিস্টেম ইমেজ। এটি অপরিবর্তিত Android ওপেন সোর্স প্রজেক্ট (AOSP) কোড সহ একটি পিওর Android ইমপ্লিমেন্টেশন হিসেবে বিবেচিত হয় যা Android 9 বা তার পরের যেকোনও ভার্সন রান করে এমন যেকোনও Android ডিভাইসে সফলভাবে রান করা যেতে পারে।
VTS ও CTS-on-GSI টেস্ট চালানোর জন্য GSI ব্যবহার করা হয়। Android ডিভাইসের সিস্টেম ইমেজ GSI দিয়ে প্রতিস্থাপন করা হয় এবং তারপর ভেন্ডর টেস্ট স্যুট (VTS) ও কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) দিয়ে পরীক্ষা করা হয় যাতে নিশ্চিত করা যায় যে ডিভাইসটি Android-এর লেটেস্ট ভার্সনের সাথে ভেন্ডর ইন্টারফেস সঠিকভাবে প্রয়োগ করছে।
GSI ব্যবহার শুরু করতে, নিম্নলিখিত বিভাগগুলি থেকে GSI কনফিগারেশন (এবং অনুমোদিত ভেরিয়েশন) ও প্রকার সম্পর্কে বিস্তারিত জানুন। আপনি GSI ব্যবহার করার জন্য প্রস্তুত হলে, আপনার ডিভাইসের জন্য GSI ডাউনলোড ও বিল্ড করুন টার্গেট করুন, তারপর Android ডিভাইসে GSI ফ্ল্যাশ করুন।
GSI কনফিগারেশন ও তার পার্থক্য
বর্তমান Android GSI-তে নিম্নলিখিত কনফিগারেশন আছে:
- Treble. GSI-তে AIDL/HIDL-ভিত্তিক আর্কিটেকচারাল পরিবর্তন (Treble নামেও পরিচিত) সম্পূর্ণভাবে কাজ করে, যার মধ্যে AIDL ইন্টারফেস ও HIDL ইন্টারফেস অন্তর্ভুক্ত। আপনি GSI ব্যবহার করতে পারবেন এমন যেকোনও Android ডিভাইসে যা AIDL/HIDL ভেন্ডর ইন্টারফেস ব্যবহার করে। (আরও জানতে, আর্কিটেকচার রিসোর্স দেখুন।)
- ফাইল সিস্টেম। GSI-তে ext4 ফাইল সিস্টেম ব্যবহার করা হয়।
বর্তমান Android GSI-তে নিম্নলিখিত প্রধান পার্থক্যগুলি অন্তর্ভুক্ত:
- CPU আর্কিটেকচার। বিভিন্ন CPU নির্দেশাবলী (ARM, x86 ইত্যাদি) এবং CPU বিটনেস (৩২ বিট বা ৬৪ বিট) কাজ করে।
Treble মেনে চলা সংক্রান্ত পরীক্ষার জন্য GSI টার্গেট
কম্প্লায়েন্স টেস্টিংয়ের জন্য ব্যবহৃত GSI, ডিভাইসটি যে Android ভার্সন দিয়ে লঞ্চ করা হয় সেটি দ্বারা নির্ধারিত হয়।
| ডিভাইসের ধরন | বিল্ড টার্গেট |
|---|---|
| Android 15 সহ লঞ্চ করা ডিভাইস | gsi_$arch-user (স্বাক্ষর করা হয়েছে) |
| Android 14-এর সাথে লঞ্চ হওয়া ডিভাইস | gsi_$arch-user (স্বাক্ষরিত) |
| Android 13-এর সাথে লঞ্চ হওয়া ডিভাইস | gsi_$arch-user (স্বাক্ষর করা হয়েছে) |
| Android 12L সহ লঞ্চ করা ডিভাইস | gsi_$arch-user (স্বাক্ষরিত) |
| Android 12 সহ লঞ্চ করা ডিভাইস | gsi_$arch-user (স্বাক্ষরিত) |
| Android 11-এর সাথে লঞ্চ হওয়া ডিভাইস | gsi_$arch-user (স্বাক্ষর করা হয়েছে) |
সব GSI Android 12 কোডবেস থেকে তৈরি করা হয় এবং প্রতিটি CPU আর্কিটেকচারের সাথে সংশ্লিষ্ট GSI বাইনারি থাকে (GSI তৈরি করা লিঙ্কে বিল্ড টার্গেটের তালিকা দেখুন)।
Android 12 GSI-তে পরিবর্তন
Android 12-এর সাথে লঞ্চ করা বা আপডেট করা ডিভাইসগুলিকে অবশ্যই কমপ্লায়েন্স টেস্টিংয়ের জন্য Android 12 GSI ব্যবহার করতে হবে। এর মধ্যে আগের GSI-এর তুলনায় নিম্নলিখিত প্রধান পরিবর্তনগুলি অন্তর্ভুক্ত:
- টার্গেটের নাম। কমপ্লায়েন্স টেস্টের জন্য GSI টার্গেটের নাম
পরিবর্তন করে
gsi_$archকরা হয়েছে। টার্গেট নামaosp_$archসহ GSI, Android অ্যাপ ডেভেলপারদের জন্য রাখা হয়েছে। টেস্ট প্ল্যানCTS-on-GSI-এর সময়সীমাও ভেন্ডর ইন্টারফেস পরীক্ষা করার জন্য কমানো হয়েছে। - পুরনো GSI বন্ধ করে দেওয়া হয়েছে। GSI 12 Android 8.0 বা 8.1 ডিভাইসের জন্য ওয়ার্কঅ্যারাউন্ড সরিয়ে দেয়, যেগুলি সম্পূর্ণভাবে Treblized নয়।
- Userdebug SEPolicy. GSI
gsi_$arch-এuserdebug_plat_sepolicy.cilআছে। OEM-নির্দিষ্টvendor_boot-debug.imgবাboot-debug.imgফ্ল্যাশ করার সময়,/system/bin/initGSIsystem.imgথেকেuserdebug_plat_sepolicy.cilলোড করবে। রেফারেন্স VTS টেস্টিংয়ের সাথে Debug Ramdisk-এর বিবরণ দেখুন।
Android 11 GSI পরিবর্তন
Android 11-এর সাথে লঞ্চ করা বা Android 11-এ আপডেট করা ডিভাইসগুলিকে অবশ্যই কমপ্লায়েন্স টেস্টিংয়ের জন্য Android 11 GSI ব্যবহার করতে হবে। এর মধ্যে আগের GSI থেকে নিম্নলিখিত প্রধান পরিবর্তনগুলি অন্তর্ভুক্ত:
- system_ext কন্টেন্ট। Android
11 নতুন পার্টিশন
system_extসংজ্ঞায়িত করে। GSI, সিস্টেম এক্সটেনশনের কন্টেন্টকে ফোল্ডারেরsystem/system_extমধ্যে রাখে। - APEXes. GSI-তে ফ্ল্যাটেন করা ও কম্প্রেস করা APEX, দুটিই থাকে।
রান টাইমে ভেন্ডর পার্টিশনে সিস্টেম প্রপার্টি
ro.apex.updatableদ্বারা কোনটি ব্যবহার করা হবে তা নির্ধারণ করা হয়। রেফারেন্স APEX আপডেট কাজ করে এমনভাবে সিস্টেম কনফিগার করা লিঙ্কে গিয়ে বিস্তারিত জানুন।
Android 10 GSI পরিবর্তন
Android 10-এর সাথে লঞ্চ করা বা আপডেট করা ডিভাইসগুলিকে অবশ্যই সম্মতি পরীক্ষার জন্য Android 10 GSI ব্যবহার করতে হবে। এর মধ্যে আগের GSI থেকে নিম্নলিখিত প্রধান পরিবর্তনগুলি অন্তর্ভুক্ত:
- ব্যবহারকারীর বিল্ড। GSI-তে Android 10 থেকে ব্যবহারকারীর বিল্ড আছে। Android 10-এ, GSI-তে CTS/VTS কমপ্লায়েন্স টেস্টিংয়ে ব্যবহারকারীর বিল্ড GSI ব্যবহার করা যেতে পারে। রেফারেন্স Debug Ramdisk সহ VTS টেস্টিং আরও তথ্যের জন্য।
- আনস্পার্সড ফর্ম্যাট। টার্গেট সহ GSI
aosp_$archআনস্পার্সড ফর্ম্যাটে তৈরি করা হয়। প্রয়োজন হলে, আপনিimg2simgব্যবহার করে আনস্পার্সড GSI-কে স্পার্স ফর্ম্যাটে কনভার্ট করতে পারেন। - System-as-root. লেগ্যাসি GSI বিল্ড টার্গেট
aosp_$arch_aবন্ধ করে দেওয়া হয়েছে। Android 8 বা 8.1 থেকে Android 10-এ আপগ্রেড করা ডিভাইসের ক্ষেত্রে, ramdisk এবং non-system-as-root থাকলে, লিগ্যাসি GSIaosp_$arch_abব্যবহার করুন। ramdisk-এ আপগ্রেড করাinit, system-as-root লেআউট সহ OEM system.img-কে সাপোর্ট করে। - বুট যাচাই করুন। GSI ব্যবহার করলে, আপনাকে শুধু ডিভাইস আনলক করতে হবে। যাচাই করা বুট বন্ধ করার প্রয়োজন নেই।
Android 9 GSI পরিবর্তন
Android 9-এর সাথে লঞ্চ হওয়া বা এতে আপডেট করা ডিভাইসে কমপ্লায়েন্স টেস্টিংয়ের জন্য Android 9 GSI ব্যবহার করতে হবে। এর মধ্যে আগের GSI থেকে নিম্নলিখিত প্রধান পরিবর্তনগুলি অন্তর্ভুক্ত:
- GSI ও এমুলেটর মার্জ করে। GSIs, এমুলেটর প্রোডাক্টের সিস্টেম
ইমেজ থেকে তৈরি করা হয়, যেমন,
aosp_arm64এবংaosp_x86। - সিস্টেম-অ্যাজ-রুট। Android-এর আগের ভার্সনে, A/B আপডেট কাজ করে না এমন ডিভাইস
/systemডিরেক্টরির অধীনে সিস্টেম ইমেজ মাউন্ট করতে পারে। Android 9-এ, সিস্টেম ইমেজের রুট ডিভাইসের রুট হিসেবে মাউন্ট করা হয়। - 64-বিট বাইন্ডার ইন্টারফেস। Android 8.x-এ, ৩২-বিট GSI ৩২-বিট বাইন্ডার ইন্টারফেস ব্যবহার করত। Android 9-এ ৩২-বিট বাইন্ডার ইন্টারফেস কাজ করে না, তাই ৩২-বিট GSI এবং ৬৪-বিট GSI, উভয় ক্ষেত্রেই ৬৪-বিট বাইন্ডার ইন্টারফেস ব্যবহার করা হয়।
- VNDK এনফোর্সমেন্ট। Android 8.1-এ, VNDK ঐচ্ছিক ছিল।
Android 9 থেকে শুরু করে, VNDK বাধ্যতামূলক, তাই
BOARD_VNDK_VERSIONঅবশ্যই সেট করতে হবে। - মানানসই সিস্টেম প্রপার্টি। Android
9 মানানসই
সিস্টেম প্রপার্টির (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true) জন্য অ্যাক্সেস চেক করার সুবিধা চালু করে।
Android 9 Keymaster-এ পরিবর্তন
Android-এর আগের ভার্সনে, Keymaster 3 বা তার আগের ভার্সন ব্যবহার করা ডিভাইসের ক্ষেত্রে
প্রয়োজন ছিল যে, রান করা সিস্টেমের মাধ্যমে রিপোর্ট করা ভার্সন সংক্রান্ত তথ্য
(ro.build.version.release এবং
ro.build.version.security_patch) বুটলোডারের মাধ্যমে রিপোর্ট করা ভার্সন সংক্রান্ত তথ্যের সাথে
ম্যাচ করছে কিনা তা যাচাই করা। এই ধরনের তথ্য সাধারণত
বুট ইমেজ হেডার থেকে পাওয়া যায়।
Android 9 ও তার পরবর্তী যেকোনও ভার্সনে, এই প্রয়োজনীয়তা পরিবর্তন করে GSI বুট করার জন্য ভেন্ডরদের অনুমতি দেওয়া হয়েছে। বিশেষ করে, Keymaster-এর যাচাইকরণ করা উচিত নয় কারণ GSI-এর রিপোর্ট করা ভার্সন সংক্রান্ত তথ্য ভেন্ডরের বুটলোডারের রিপোর্ট করা ভার্সন সংক্রান্ত তথ্যের সাথে ম্যাচ নাও করতে পারে। Keymaster 3 বা তার নিচের ভার্সন ব্যবহার করা ডিভাইসের ক্ষেত্রে, ভেন্ডরদের অবশ্যই Keymaster-এর প্রয়োগে পরিবর্তন করতে হবে যাতে যাচাইকরণ এড়ানো যায় (অথবা Keymaster 4-এ আপগ্রেড করতে হবে)। Keymaster সম্পর্কে আরও জানতে, হার্ডওয়্যার-ব্যাকড Keystore দেখুন।
GSI ডাউনলোড করা
আপনি AOSP কন্টিনিউয়াস ইন্টিগ্রেশন (CI) ওয়েবসাইট ci.android.com থেকে আগে থেকে তৈরি GSI ডাউনলোড করতে পারবেন। আপনার হার্ডওয়্যার প্ল্যাটফর্মের জন্য GSI-এর ধরন ডাউনলোডের জন্য উপলভ্য না থাকলে, নির্দিষ্ট টার্গেটের জন্য GSI তৈরি করার ব্যাপারে বিস্তারিত জানতে, নিম্নলিখিত বিভাগ দেখুন।
GSI তৈরি করা
Android 9 থেকে শুরু করে, প্রতিটি Android ভার্সনে
AOSP-তে DESSERT-gsi নামের GSI ব্রাঞ্চ আছে (যেমন,
android12-gsi হল Android 12-এ
GSI ব্রাঞ্চ)। GSI ব্রাঞ্চে Android-এর কন্টেন্ট অন্তর্ভুক্ত থাকে,
যার মধ্যে সব সিকিউরিটি প্যাচ এবং
GSI প্যাচ প্রয়োগ করা থাকে।
GSI তৈরি করতে, GSI শাখা থেকে
ডাউনলোড করে এবং
GSI বিল্ড
টার্গেট বেছে নিয়ে Android সোর্স ট্রি সেট-আপ করুন। আপনার ডিভাইসের জন্য সঠিক GSI
ভার্সন নির্ধারণ করতে, নিচে দেওয়া বিল্ড টার্গেট টেবিল ব্যবহার করুন। বিল্ড সম্পূর্ণ হওয়ার পরে, GSI হল সিস্টেম
ইমেজ (অর্থাৎ, system.img) এবং আউটপুট ফোল্ডারে
out/target/product/generic_arm64 দেখা যায়।
যেমন, GSI ব্রাঞ্চে android12-gsi GSI বিল্ড টার্গেট
gsi_arm64-userdebug তৈরি করতে,
নিচে উল্লেখ করা কমান্ডগুলি রান করুন।
$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi $ repo sync -cq $ source build/envsetup.sh $ lunch gsi_arm64-userdebug $ make -j4
Android GSI বিল্ড টার্গেট
নিচে উল্লেখ করা GSI বিল্ড টার্গেটগুলি Android 9 বা তার পরের যেকোনও ভার্সনে লঞ্চ করা ডিভাইসের জন্য।
| GSI-এর নাম | CPU আর্চ | বাইন্ডার ইন্টারফেস বিটনেস | সিস্টেম-অ্যাজ-রুট | বিল্ড টার্গেট |
|---|---|---|---|---|
gsi_arm |
সশস্ত্র করুন | ৩২ | Y | gsi_arm-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | ৬৪ | Y | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | ৩২ | Y | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | ৬৪ | Y | gsi_x86_64-usergsi_x86_64-userdebug |
ফ্ল্যাশিং GSI-এর জন্য প্রয়োজনীয়তা
Android ডিভাইসের ডিজাইন আলাদা আলাদা হতে পারে, তাই সব ডিভাইসে প্রয়োগ করার জন্য GSI ফ্ল্যাশ করার কোনও সাধারণ কমান্ড বা নির্দেশাবলীর সেট নেই। ফ্ল্যাশিং সংক্রান্ত স্পষ্ট নির্দেশাবলীর জন্য Android ডিভাইস প্রস্তুতকারকের সাথে যোগাযোগ করুন। সাধারণ নির্দেশিকা হিসেবে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- ডিভাইসে নিম্নলিখিতগুলি আছে কিনা তা নিশ্চিত করুন:
- Treblized
- ডিভাইস আনলক করার পদ্ধতি (যাতে সেগুলি
fastbootব্যবহার করে ফ্ল্যাশ করা যায়) fastboot-এর মাধ্যমে ফ্ল্যাশ করার জন্য আনলক করা অবস্থা (আপনার কাছেfastboot-এর লেটেস্ট ভার্সন আছে কিনা তা নিশ্চিত করতে, Android সোর্স ট্রি থেকে এটি তৈরি করুন।)
- বর্তমান সিস্টেম পার্টিশন মুছে দিন, তারপর সিস্টেম পার্টিশনে GSI ফ্ল্যাশ করুন।
- ব্যবহারকারীর ডেটা মুছে দিন এবং অন্যান্য প্রয়োজনীয় পার্টিশন থেকে ডেটা মুছে দিন (যেমন, ব্যবহারকারীর ডেটা ও সিস্টেম পার্টিশন)।
- ডিভাইস রিবুট করুন।
যেমন, যেকোনও Pixel ডিভাইসে GSI ফ্ল্যাশ করতে:
fastbootমোডে বুট করুন এবং বুটলোডার আনলক করুন।- যেসব ডিভাইস
fastbootdসাপোর্ট করে সেগুলিকেfastbootd-এ বুট করতে হবে, এর জন্য:$ fastboot reboot fastboot
- সিস্টেম পার্টিশনে GSI মুছে দিয়ে ফ্ল্যাশ করুন:
$ fastboot erase system $ fastboot flash system system.img
- আপনার ডিভাইসে Android ভার্চুয়াল ফ্রেমওয়ার্ক কাজ করলে, সুরক্ষিত ভার্চুয়াল মেশিন ফার্মওয়্যার ফ্ল্যাশ করুন:
$ fastboot flash pvmfw pvmfw.img
- ব্যবহারকারীর ডেটা মুছে দিন এবং অন্যান্য প্রয়োজনীয় পার্টিশন থেকে ডেটা মুছে দিন (যেমন, ব্যবহারকারীর ডেটা ও সিস্টেম পার্টিশন):
$ fastboot -w
- বুটলোডারে রিবুট করুন:
$ fastboot reboot-bootloader
- প্রদান করা vbmeta ফ্ল্যাশ করার সময় যাচাই করা বুট যাচাইকরণ বন্ধ করুন:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition')
fastboot: error: Command failed$ fastboot delete-logical-partition product_a
_a সিস্টেম পার্টিশনের স্লট আইডির সাথে ম্যাচ করতে হবে,
যেমন এই উদাহরণে system_a।
GSI-তে কন্ট্রিবিউট করুন
GSI ডেভেলপমেন্টে আপনার কন্ট্রিবিউশনকে Android স্বাগত জানায়। আপনি GSI উন্নত করতে সাহায্য করতে পারেন:
- GSI প্যাচ তৈরি করা।
DESSERT-gsiডেভেলপমেন্ট ব্রাঞ্চ নয় এবং এটি শুধুমাত্র AOSP-এর লেটেস্ট রিলিজ ব্রাঞ্চ (android17-release) থেকে চেরি পিক গ্রহণ করে, তাই GSI প্যাচ জমা দিতে হলে, আপনাকে এগুলি করতে হবে:-
AOSP
android17-releaseশাখায় প্যাচ জমা দিন। DESSERT-gsi-এ প্যাচ চেরিপিক করুন।- চেরি পিক পর্যালোচনা করার জন্য বাগ ফাইল করুন।
-
AOSP
- GSI বাগ সম্পর্কে অভিযোগ করা বা অন্যান্য সাজেশন দেওয়া। বাগ সম্পর্কে অভিযোগ জানানো লিঙ্কে দেওয়া নির্দেশাবলী ভালো করে পড়ে নিন, তারপর GSI বাগ ব্রাউজ করুন বা ফাইল করুন।
পরামর্শ
adb ব্যবহার করে নেভিগেশন বার মোড পরিবর্তন করুন
GSI-এর মাধ্যমে বুট করার সময়, ভেন্ডর ওভাররাইডিংয়ের মাধ্যমে নেভিগেশন বার মোড কনফিগার করা হয়। আপনি রানটাইমে নিম্নলিখিত adb কমান্ড চালিয়ে নেভিগেশন বার মোড পরিবর্তন করতে পারেন।
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
যেখানে mode হতে পারে threebutton, twobutton,
gestural এবং আরও অনেক কিছু।