জেনেরিক সিস্টেম ইমেজ

জেনেরিক সিস্টেম ইমেজ (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-তে নিম্নলিখিত কনফিগারেশন আছে:

বর্তমান 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/init GSI system.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 থাকলে, লিগ্যাসি GSI aosp_$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-user
gsi_arm-userdebug
gsi_arm64 ARM64 ৬৪ Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 ৩২ Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 ৬৪ Y gsi_x86_64-user
gsi_x86_64-userdebug

ফ্ল্যাশিং GSI-এর জন্য প্রয়োজনীয়তা

Android ডিভাইসের ডিজাইন আলাদা আলাদা হতে পারে, তাই সব ডিভাইসে প্রয়োগ করার জন্য GSI ফ্ল্যাশ করার কোনও সাধারণ কমান্ড বা নির্দেশাবলীর সেট নেই। ফ্ল্যাশিং সংক্রান্ত স্পষ্ট নির্দেশাবলীর জন্য Android ডিভাইস প্রস্তুতকারকের সাথে যোগাযোগ করুন। সাধারণ নির্দেশিকা হিসেবে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ডিভাইসে নিম্নলিখিতগুলি আছে কিনা তা নিশ্চিত করুন:
    • Treblized
    • ডিভাইস আনলক করার পদ্ধতি (যাতে সেগুলি fastboot ব্যবহার করে ফ্ল্যাশ করা যায়)
    • fastboot-এর মাধ্যমে ফ্ল্যাশ করার জন্য আনলক করা অবস্থা (আপনার কাছে fastboot-এর লেটেস্ট ভার্সন আছে কিনা তা নিশ্চিত করতে, Android সোর্স ট্রি থেকে এটি তৈরি করুন।)
  2. বর্তমান সিস্টেম পার্টিশন মুছে দিন, তারপর সিস্টেম পার্টিশনে GSI ফ্ল্যাশ করুন।
  3. ব্যবহারকারীর ডেটা মুছে দিন এবং অন্যান্য প্রয়োজনীয় পার্টিশন থেকে ডেটা মুছে দিন (যেমন, ব্যবহারকারীর ডেটা ও সিস্টেম পার্টিশন)।
  4. ডিভাইস রিবুট করুন।

যেমন, যেকোনও Pixel ডিভাইসে GSI ফ্ল্যাশ করতে:

  1. fastbootমোডে বুট করুন এবং বুটলোডার আনলক করুন।
  2. যেসব ডিভাইস fastbootd সাপোর্ট করে সেগুলিকে fastbootd-এ বুট করতে হবে, এর জন্য:
    $ fastboot reboot fastboot
  3. সিস্টেম পার্টিশনে GSI মুছে দিয়ে ফ্ল্যাশ করুন:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. আপনার ডিভাইসে Android ভার্চুয়াল ফ্রেমওয়ার্ক কাজ করলে, সুরক্ষিত ভার্চুয়াল মেশিন ফার্মওয়্যার ফ্ল্যাশ করুন:
    $ fastboot flash pvmfw pvmfw.img
    
  5. ব্যবহারকারীর ডেটা মুছে দিন এবং অন্যান্য প্রয়োজনীয় পার্টিশন থেকে ডেটা মুছে দিন (যেমন, ব্যবহারকারীর ডেটা ও সিস্টেম পার্টিশন):
    $ fastboot -w
  6. বুটলোডারে রিবুট করুন:
    $ fastboot reboot-bootloader
  7. প্রদান করা vbmeta ফ্ল্যাশ করার সময় যাচাই করা বুট যাচাইকরণ বন্ধ করুন:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
Android 10 বা এর পরবর্তী যেকোনও ভার্সন থাকা ডিভাইসে, যেগুলির সিস্টেম পার্টিশন ছোট, GSI ফ্ল্যাশ করার সময় নিম্নলিখিত সমস্যার মেসেজটি দেখা যেতে পারে:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
প্রোডাক্ট পার্টিশন মুছে দিতে এবং সিস্টেম পার্টিশনের জন্য স্পেস খালি করতে নিম্নলিখিত কমান্ড ব্যবহার করুন। এটি GSI ফ্ল্যাশ করার জন্য অতিরিক্ত জায়গা দেয়:
$ fastboot delete-logical-partition product_a
পোস্টফিক্স _a সিস্টেম পার্টিশনের স্লট আইডির সাথে ম্যাচ করতে হবে, যেমন এই উদাহরণে system_a।

GSI-তে কন্ট্রিবিউট করুন

GSI ডেভেলপমেন্টে আপনার কন্ট্রিবিউশনকে Android স্বাগত জানায়। আপনি GSI উন্নত করতে সাহায্য করতে পারেন:

  • GSI প্যাচ তৈরি করা। DESSERT-gsi ডেভেলপমেন্ট ব্রাঞ্চ নয় এবং এটি শুধুমাত্র AOSP-এর লেটেস্ট রিলিজ ব্রাঞ্চ (android17-release) থেকে চেরি পিক গ্রহণ করে, তাই GSI প্যাচ জমা দিতে হলে, আপনাকে এগুলি করতে হবে:
    1. AOSP android17-release শাখায় প্যাচ জমা দিন।
    2. DESSERT-gsi-এ প্যাচ চেরিপিক করুন।
    3. চেরি পিক পর্যালোচনা করার জন্য বাগ ফাইল করুন।
  • GSI বাগ সম্পর্কে অভিযোগ করা বা অন্যান্য সাজেশন দেওয়া। বাগ সম্পর্কে অভিযোগ জানানো লিঙ্কে দেওয়া নির্দেশাবলী ভালো করে পড়ে নিন, তারপর GSI বাগ ব্রাউজ করুন বা ফাইল করুন।

পরামর্শ

adb ব্যবহার করে নেভিগেশন বার মোড পরিবর্তন করুন

GSI-এর মাধ্যমে বুট করার সময়, ভেন্ডর ওভাররাইডিংয়ের মাধ্যমে নেভিগেশন বার মোড কনফিগার করা হয়। আপনি রানটাইমে নিম্নলিখিত adb কমান্ড চালিয়ে নেভিগেশন বার মোড পরিবর্তন করতে পারেন।

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

যেখানে mode হতে পারে threebutton, twobutton, gestural এবং আরও অনেক কিছু।