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

জেনেরিক সিস্টেম ইমেজ (GSI) হলো অ্যান্ড্রয়েড ডিভাইসের জন্য সামঞ্জস্যপূর্ণ কনফিগারেশনসহ একটি সিস্টেম ইমেজ। এটিকে অপরিবর্তিত অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) কোডসহ একটি বিশুদ্ধ অ্যান্ড্রয়েড বাস্তবায়ন হিসেবে বিবেচনা করা হয়, যা অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালিত যেকোনো অ্যান্ড্রয়েড ডিভাইসে সফলভাবে চালানো যায়।

VTS এবং CTS-on-GSI টেস্ট চালানোর জন্য GSI ব্যবহার করা হয়। একটি অ্যান্ড্রয়েড ডিভাইসের সিস্টেম ইমেজকে একটি GSI দিয়ে প্রতিস্থাপন করে ভেন্ডর টেস্ট স্যুট (VTS) এবং কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) দিয়ে পরীক্ষা করা হয়, যাতে নিশ্চিত করা যায় যে ডিভাইসটি অ্যান্ড্রয়েডের সর্বশেষ সংস্করণের সাথে ভেন্ডর ইন্টারফেসগুলো সঠিকভাবে প্রয়োগ করছে।

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

জিএসআই কনফিগারেশন এবং বৈচিত্র্য

বর্তমান অ্যান্ড্রয়েড জিএসআই-এর কনফিগারেশনটি নিম্নরূপ:

বর্তমান অ্যান্ড্রয়েড জিএসআই-তে নিম্নলিখিত প্রধান পার্থক্যগুলো অন্তর্ভুক্ত রয়েছে:

  • সিপিইউ আর্কিটেকচার। বিভিন্ন সিপিইউ নির্দেশাবলীর (ARM, x86, ইত্যাদি) এবং সিপিইউ বিটনেসের (৩২ বিট বা ৬৪ বিট) জন্য সমর্থন।

ট্রিবল কমপ্লায়েন্স পরীক্ষার জন্য জিএসআই লক্ষ্যমাত্রা

কমপ্লায়েন্স টেস্টিংয়ের জন্য ব্যবহৃত জিএসআই (GSI) নির্ধারিত হয় ডিভাইসটি যে অ্যান্ড্রয়েড ভার্সন দিয়ে চালু হয়, তার ওপর ভিত্তি করে।

ডিভাইসের ধরন লক্ষ্য তৈরি করুন
অ্যান্ড্রয়েড ১৫ সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)
অ্যান্ড্রয়েড ১৪ সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)
অ্যান্ড্রয়েড ১৩ সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)
অ্যান্ড্রয়েড ১২এল সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)
অ্যান্ড্রয়েড ১২ সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)
অ্যান্ড্রয়েড ১১ সহ লঞ্চ হওয়া ডিভাইসগুলি gsi_$arch-user (স্বাক্ষরিত)

সমস্ত GSI অ্যান্ড্রয়েড ১২ কোডবেস থেকে তৈরি করা হয়, এবং প্রতিটি সিপিইউ আর্কিটেকচারের জন্য একটি সংশ্লিষ্ট GSI বাইনারি রয়েছে ( GSI তৈরি করা অংশে বিল্ড টার্গেটের তালিকা দেখুন)।

অ্যান্ড্রয়েড ১২ জিএসআই পরিবর্তন

যেসব ডিভাইস অ্যান্ড্রয়েড ১২ সহ লঞ্চ হচ্ছে বা আপডেট করা হচ্ছে, সেগুলোর কমপ্লায়েন্স টেস্টিংয়ের জন্য অবশ্যই অ্যান্ড্রয়েড ১২ জিএসআই ব্যবহার করতে হবে। পূর্ববর্তী জিএসআইগুলো থেকে এতে নিম্নলিখিত প্রধান পরিবর্তনগুলো অন্তর্ভুক্ত রয়েছে:

  • টার্গেট নেম। কমপ্লায়েন্স টেস্টের জন্য GSI টার্গেট নেম পরিবর্তন করে gsi_$arch করা হয়েছে। অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের জন্য aosp_$arch টার্গেট নেমযুক্ত GSI-টি রাখা হয়েছে। ভেন্ডর ইন্টারফেস পরীক্ষার জন্য CTS-on-GSI টেস্ট প্ল্যানটিও সংক্ষিপ্ত করা হয়েছে।
  • লিগ্যাসি জিএসআই পর্যায়ক্রমে বন্ধ করে দেওয়া হচ্ছে। জিএসআই ১২ সেইসব ওয়ার্কঅ্যারাউন্ডগুলো সরিয়ে দেয় যা সম্পূর্ণভাবে ট্রেবলাইজড নয় এমন অ্যান্ড্রয়েড ৮.০ বা ৮.১ ডিভাইসগুলোর জন্য ব্যবহৃত হতো।
  • ইউজারডিবাগ এসইপলিসি। 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 Testing with Debug Ramdisk" দেখুন।

অ্যান্ড্রয়েড ১১ জিএসআই পরিবর্তন

যেসব ডিভাইস অ্যান্ড্রয়েড ১১ সহ লঞ্চ হচ্ছে বা আপডেট করা হচ্ছে, সেগুলোর কমপ্লায়েন্স টেস্টিংয়ের জন্য অবশ্যই অ্যান্ড্রয়েড ১১ জিএসআই ব্যবহার করতে হবে। পূর্ববর্তী জিএসআইগুলো থেকে এতে নিম্নলিখিত প্রধান পরিবর্তনগুলো অন্তর্ভুক্ত রয়েছে:

  • system_ext-এর বিষয়বস্তু। অ্যান্ড্রয়েড ১১ system_ext নামে একটি নতুন পার্টিশন তৈরি করেছে। GSI সিস্টেম এক্সটেনশনের বিষয়বস্তু system/system_ext ফোল্ডারের অধীনে রাখে।
  • APEX-সমূহ। GSI-তে ফ্ল্যাটেনড এবং কম্প্রেসড উভয় প্রকারের APEX থাকে। রান টাইমে ভেন্ডর পার্টিশনে থাকা ro.apex.updatable সিস্টেম প্রপার্টি দ্বারা কোনটি ব্যবহৃত হবে তা নির্ধারিত হয়। বিস্তারিত জানতে "APEX আপডেট সমর্থন করার জন্য সিস্টেম কনফিগার করা" অংশটি দেখুন।

অ্যান্ড্রয়েড ১০ জিএসআই পরিবর্তন

যেসব ডিভাইস অ্যান্ড্রয়েড ১০ সহ লঞ্চ হচ্ছে বা আপডেট করা হচ্ছে, কমপ্লায়েন্স টেস্টিংয়ের জন্য সেগুলোতে অবশ্যই অ্যান্ড্রয়েড ১০ জিএসআই ব্যবহার করতে হবে। পূর্ববর্তী জিএসআইগুলো থেকে এতে নিম্নলিখিত প্রধান পরিবর্তনগুলো অন্তর্ভুক্ত রয়েছে:

  • ইউজার বিল্ড। অ্যান্ড্রয়েড ১০ থেকে GSI-এর ইউজার বিল্ড রয়েছে। অ্যান্ড্রয়েড ১০-এ, ইউজার বিল্ড GSI, CTS-on-GSI/VTS কমপ্লায়েন্স টেস্টিং-এ ব্যবহার করা যেতে পারে। বিস্তারিত জানতে ‘VTS Testing with Debug Ramdisk’ দেখুন।
  • আনস্পার্সড ফরম্যাট। aosp_$arch টার্গেটযুক্ত GSI-গুলো আনস্পার্সড ফরম্যাটে বিল্ড করা হয়। প্রয়োজনে, আপনি একটি আনস্পার্সড GSI-কে স্পার্স ফরম্যাটে রূপান্তর করতে img2simg ব্যবহার করতে পারেন।
  • সিস্টেম-অ্যাজ-রুট। aosp_$arch_a নামের লিগ্যাসি GSI বিল্ড টার্গেটটি পর্যায়ক্রমে বন্ধ করে দেওয়া হয়েছে। ramdisk এবং নন-সিস্টেম-অ্যাজ-রুট সহ Android 8 বা 8.1 থেকে Android 10-এ আপগ্রেড করা ডিভাইসগুলির জন্য, লিগ্যাসি GSI aosp_$arch_ab ব্যবহার করুন। ramdisk-এর আপগ্রেড করা init সিস্টেম-অ্যাজ-রুট লেআউট সহ OEM system.img সমর্থন করে।
  • ভেরিফাই বুট। GSI ব্যবহার করে আপনাকে শুধু ডিভাইসটি আনলক করতে হবে। ভেরিফাই বুট নিষ্ক্রিয় করার কোনো প্রয়োজন নেই।

অ্যান্ড্রয়েড ৯ জিএসআই পরিবর্তন

যেসব ডিভাইস অ্যান্ড্রয়েড ৯ সহ লঞ্চ হচ্ছে বা আপডেট করা হচ্ছে, সেগুলোর কমপ্লায়েন্স টেস্টিংয়ের জন্য অবশ্যই অ্যান্ড্রয়েড ৯ জিএসআই ব্যবহার করতে হবে। পূর্ববর্তী জিএসআইগুলো থেকে এতে নিম্নলিখিত প্রধান পরিবর্তনগুলো অন্তর্ভুক্ত রয়েছে:

  • GSI এবং এমুলেটরকে একত্রিত করে। GSI-গুলো এমুলেটর প্রোডাক্টের সিস্টেম ইমেজ থেকে তৈরি করা হয়, যেমন aosp_arm64 এবং aosp_x86
  • সিস্টেম-কে-রুট হিসেবে। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, যে ডিভাইসগুলি A/B আপডেট সমর্থন করত না, সেগুলি /system ডিরেক্টরির অধীনে সিস্টেম ইমেজ মাউন্ট করতে পারত। অ্যান্ড্রয়েড ৯-এ, সিস্টেম ইমেজের রুটটি ডিভাইসের রুট হিসেবে মাউন্ট করা হয়।
  • ৬৪-বিট বাইন্ডার ইন্টারফেস। অ্যান্ড্রয়েড ৮.x-এ, ৩২-বিট জিএসআইগুলো ৩২-বিট বাইন্ডার ইন্টারফেস ব্যবহার করত। অ্যান্ড্রয়েড ৯ ৩২-বিট বাইন্ডার ইন্টারফেস সমর্থন করে না, তাই ৩২-বিট এবং ৬৪-বিট উভয় জিএসআই-ই ৬৪-বিট বাইন্ডার ইন্টারফেস ব্যবহার করে।
  • VNDK বাধ্যতামূলক। অ্যান্ড্রয়েড ৮.১-এ VNDK ঐচ্ছিক ছিল। অ্যান্ড্রয়েড ৯ থেকে VNDK বাধ্যতামূলক, তাই BOARD_VNDK_VERSION অবশ্যই সেট করতে হবে।
  • সামঞ্জস্যপূর্ণ সিস্টেম প্রপার্টি। অ্যান্ড্রয়েড ৯ একটি সামঞ্জস্যপূর্ণ সিস্টেম প্রপার্টির জন্য অ্যাক্সেস চেক সক্ষম করে ( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true )।

অ্যান্ড্রয়েড ৯ কীমাস্টার পরিবর্তন

অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, কীমাস্টার ৩ বা তার নিম্নতর সংস্করণ ব্যবহারকারী ডিভাইসগুলির জন্য এটি যাচাই করা আবশ্যক ছিল যে, চলমান সিস্টেম দ্বারা প্রদত্ত সংস্করণ তথ্য ( ro.build.version.release এবং ro.build.version.security_patch ) বুটলোডার দ্বারা প্রদত্ত সংস্করণ তথ্যের সাথে মেলে কিনা। এই ধরনের তথ্য সাধারণত বুট ইমেজ হেডার থেকে সংগ্রহ করা হতো।

অ্যান্ড্রয়েড ৯ এবং তার পরবর্তী সংস্করণগুলোতে, ভেন্ডরদের একটি GSI বুট করার সুযোগ দেওয়ার জন্য এই প্রয়োজনীয়তাটি পরিবর্তিত হয়েছে। বিশেষত, Keymaster-এর ভেরিফিকেশন করা উচিত নয়, কারণ GSI দ্বারা রিপোর্ট করা ভার্সন তথ্য ভেন্ডরের বুটলোডার দ্বারা রিপোর্ট করা ভার্সন তথ্যের সাথে নাও মিলতে পারে। Keymaster 3 বা তার নিম্নতর সংস্করণ ব্যবহারকারী ডিভাইসগুলোর জন্য, ভেন্ডরদের অবশ্যই ভেরিফিকেশন এড়িয়ে যাওয়ার জন্য Keymaster ইমপ্লিমেন্টেশনটি পরিবর্তন করতে হবে (অথবা Keymaster 4-এ আপগ্রেড করতে হবে)। Keymaster সম্পর্কে বিস্তারিত জানতে, Hardware-backed Keystore দেখুন।

জিএসআই ডাউনলোড করুন

আপনি ci.android.com- এ অবস্থিত AOSP কন্টিনিউয়াস ইন্টিগ্রেশন (CI) ওয়েবসাইট থেকে আগে থেকে তৈরি GSI ডাউনলোড করতে পারেন। যদি আপনার হার্ডওয়্যার প্ল্যাটফর্মের জন্য GSI টাইপটি ডাউনলোডের জন্য উপলব্ধ না থাকে, তবে নির্দিষ্ট টার্গেটের জন্য GSI তৈরির বিস্তারিত তথ্যের জন্য নিম্নলিখিত বিভাগটি দেখুন।

জিএসআই তৈরি করুন

অ্যান্ড্রয়েড ৯ থেকে শুরু করে, প্রতিটি অ্যান্ড্রয়েড সংস্করণের AOSP-তে DESSERT -gsi নামে একটি GSI ব্রাঞ্চ থাকে (উদাহরণস্বরূপ, android12-gsi হলো অ্যান্ড্রয়েড ১২-এর GSI ব্রাঞ্চ)। GSI ব্রাঞ্চগুলোতে সমস্ত নিরাপত্তা প্যাচ এবং GSI প্যাচ প্রয়োগ করা অ্যান্ড্রয়েডের কন্টেন্ট অন্তর্ভুক্ত থাকে।

একটি GSI তৈরি করতে, একটি GSI ব্রাঞ্চ থেকে ডাউনলোড করে এবং একটি GSI বিল্ড টার্গেট বেছে নিয়ে অ্যান্ড্রয়েড সোর্স ট্রি সেট আপ করুন। আপনার ডিভাইসের জন্য সঠিক GSI সংস্করণ নির্ধারণ করতে নিচের বিল্ড টার্গেট টেবিলগুলো ব্যবহার করুন। বিল্ড সম্পন্ন হওয়ার পর, GSI-টিই সিস্টেম ইমেজ (অর্থাৎ, system.img ) হয়ে যায় এবং এটি out/target/product/ generic_arm64 আউটপুট ফোল্ডারে দেখা যায়।

উদাহরণস্বরূপ, 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

অ্যান্ড্রয়েড জিএসআই বিল্ড টার্গেট

নিম্নলিখিত GSI বিল্ড টার্গেটগুলো অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালু হওয়া ডিভাইসগুলোর জন্য।

জিএসআই নাম সিপিইউ আর্কিটেকচার বাইন্ডার ইন্টারফেস বিটনেস সিস্টেম-অ্যাজ-রুট লক্ষ্য তৈরি করুন
gsi_arm এআরএম ৩২ ওয়াই gsi_arm-user
gsi_arm-userdebug
gsi_arm64 এআরএম৬৪ ৬৪ ওয়াই gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 ৩২ ওয়াই gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 ৬৪ ওয়াই gsi_x86_64-user
gsi_x86_64-userdebug

জিএসআই ফ্ল্যাশ করার জন্য প্রয়োজনীয়তা

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

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

উদাহরণস্বরূপ, যেকোনো পিক্সেল ডিভাইসে একটি GSI ফ্ল্যাশ করতে:

  1. fastboot মোডে বুট করুন এবং বুটলোডার আনলক করুন
  2. যে ডিভাইসগুলো fastbootd সমর্থন করে, সেগুলোকে নিম্নলিখিত উপায়ে fastbootd তে বুট করতে হবে:
    $ fastboot reboot fastboot
  3. সিস্টেম পার্টিশনে GSI মুছে ফেলুন এবং ফ্ল্যাশ করুন:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. যদি আপনার ডিভাইসটি অ্যান্ড্রয়েড ভার্চুয়াল ফ্রেমওয়ার্ক সমর্থন করে, তাহলে প্রোটেক্টেড ভার্চুয়াল মেশিন ফার্মওয়্যারটি ফ্ল্যাশ করুন:
    $ 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
অ্যান্ড্রয়েড ১০ বা তার পরবর্তী সংস্করণের ডিভাইসগুলিতে, যেগুলির সিস্টেম পার্টিশন ছোট, সেগুলিতে 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 প্যাচ তৈরি করা। 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 ইত্যাদি।