ভেন্ডর API লেভেল

ভেন্ডর API লেভেল বলতে ভেন্ডর পার্টিশন দ্বারা কাজ করে এমন ইন্টারফেসের ভার্সনকে বোঝায়। ইন্টারফেসটি দ্বিমুখী; এটি API-এর বর্ণনা দেয় যা ভেন্ডর পার্টিশন সিস্টেম পার্টিশনকে (হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার বা HAL ইন্টারফেস) প্রদান করে এবং API যা ভেন্ডর পার্টিশনের সিস্টেম পার্টিশন (লো-লেভেল নেটিভ ডেভেলপারস কিট বা LLNDK ইন্টারফেস) থেকে প্রয়োজন হয়।

ভেন্ডর API লেভেল থেকে ভেন্ডর সফ্টওয়্যার সংক্রান্ত প্রয়োজনীয়তা (VSR) নির্ধারণ করা হয়, এটি কার্যকরী ও অকার্যকর প্রয়োজনীয়তার একটি সংগ্রহ যা ভেন্ডর পার্টিশনের সফ্টওয়্যারকে অবশ্যই পূরণ করতে হবে।

এই পৃষ্ঠার বাকি অংশে, আপনার Android ভার্সনের উপর নির্ভর করে, ভেন্ডর API লেভেল নির্ধারণ করতে কীভাবে সিস্টেম প্রপার্টি ব্যবহার করা হয় তা ব্যাখ্যা করা হয়েছে।

ভেন্ডর ফ্রিজ

Android, VSR-এর নির্দিষ্ট ভার্সনে ভেন্ডর পার্টিশন ফ্রিজ করার জন্য ভেন্ডরকে অনুমতি দেয়। ভেন্ডর পার্টিশন থেকে Android যেসব ফিচার আশা করে, সেগুলি ভেন্ডর পার্টিশনের সাথে যুক্ত ভেন্ডর API লেভেল দ্বারা নির্ধারিত হয়। রানটাইমে, সিস্টেম পার্টিশনে চলা সফ্টওয়্যারের আচরণ ভেন্ডর পার্টিশনের ভেন্ডর API লেভেলের সাথে মানানসই করার জন্য অ্যাডজাস্ট করা হয়। যেমন, সিস্টেম পার্টিশনের সফ্টওয়্যার নতুন ফিচার ব্যবহার করতে পারবে না যদি সেগুলি ভেন্ডর পার্টিশনের API লেভেলে কাজ না করে।

আপনি কোনও Android-এর সাথে মানানসই ডিভাইস তৈরি করলে তবেই ভেন্ডর ফ্রিজ উপলভ্য হয়।

ভেন্ডর API লেভেল নির্ধারণ করা (Android 14 QPR3 এবং পরবর্তী ভার্সন)

Android 14 QPR3 এবং তার পরবর্তী ভার্সনের জন্য, ভেন্ডর API লেভেল আলাদাভাবে রিলিজ করা হয়, যার অর্থ হল SDK API লেভেল এবং ভেন্ডর API লেভেল সিঙ্ক করা নেই।

Android 14 QPR3 এবং এর পরবর্তী ভার্সনের জন্য আলাদা রিলিজ শিডিউলের কারণে, ভেন্ডর API লেভেল SDK API লেভেল থেকে সম্পূর্ণ আলাদা। এই ডিসকপেলিং স্পষ্ট কিনা তা নিশ্চিত করতে, ভেন্ডর API লেভেলের ফর্ম্যাট হল YYYYMM (বছর ও মাস) হিসেবে ফর্ম্যাট করা একটি তারিখ, যেখানে SDK লেভেল হল একটি পূর্ণসংখ্যা।

Android 14 QPR3 ও এর পরবর্তী যেকোনও ভার্সনে ভেন্ডর API লেভেল সম্পর্কিত নিম্নলিখিত সিস্টেম প্রপার্টি থাকে:

সিস্টেম প্রপার্টি ফর্ম্যাট বর্ণনা প্রাথমিক সেটিং
ro.board.api_level YYYYMM চিপসেটের সফ্টওয়্যার যে ভেন্ডর API লেভেল সাপোর্ট করে। এই প্রপার্টি সব চিপসেটের জন্য সেট করা আছে। এটি বিল্ড সিস্টেমের মাধ্যমে অটোমেটিক সেট করা হয়।
ro.board.first_api_level YYYYMM চিপসেটের সফ্টওয়্যার যে ভেন্ডর API লেভেলে প্রথম রিলিজ করা হয়েছিল। এই প্রপার্টি শুধুমাত্র চিপসেটের একটি ফাংশন এবং SoC চিপসেট ভেন্ডর ফ্রিজের জন্য উপযুক্ত হলে, SoC ভেন্ডর এটি সেট করে। প্রাথমিক সেটিংয়ের পরে, এই প্রপার্টি চূড়ান্ত হিসেবে বিবেচনা করা উচিত এবং এটি পরিবর্তন করা যাবে না। নতুন ভেন্ডর ফ্রিজ কোয়ালিফিকেশন সহ বিরল, ব্যতিক্রমী ক্ষেত্রে আপডেট করার অনুমতি দেওয়া হতে পারে, যদিও এটি করার জন্য খুব কমই সুপারিশ করা হয়। SoC ভেন্ডররা BOARD_SHIPPING_API_LEVEL ব্যবহার করে এই সেটিং সেট করেন।
ro.product.first_api_level পূর্ণসংখ্যা ডিভাইসটি প্রাথমিকভাবে যে SDK API লেভেলে লঞ্চ করা হয়েছে। এই প্রপার্টি OEM সেট করে এবং তারপরে OS আপগ্রেড করার পরেও এটি আর আপডেট করা হয় না।
ro.vendor.api_level YYYYMM ro.product.first_api_level-এর সাথে সম্পর্কিত ভেন্ডর API লেভেল। ro.product.first_api_level-এর ভেন্ডর এপিআই লেভেলের থেকে ro.board.api_level কম হলে, আমরা ro.vendor.api_level-কে ro.board.api_level-এর ভ্যালু হিসেবে সেট করি, তবে এটি তখনই করা হয় যখন SoC চিপসেট ভেন্ডর ফ্রিজের জন্য উপযুক্ত হয়। এই টেবিলের পরে বর্ণনা করা হয়েছে।
ro.board.api_frozen বুলিয়ান ro.board.api_level যে ভেন্ডর API লেভেলকে দেখায় সেটি চূড়ান্ত করা হলে, এই প্রপার্টি true-এ সেট করা হয়। এই প্রপার্টি সেট করা না থাকলে, ডিফল্ট হিসেবে false সেট করা হয়।
ro.llndk.api_level YYYYMM YYYYMM ফর্ম্যাটের ভেন্ডর API লেভেল যা সিস্টেম পার্টিশনে বর্তমান LLNDK প্রদান করে। LLNDK হল ব্যাকওয়ার্ড-কম্প্যাটিবল, তাই এই API লেভেলের সমান বা তার কম লেভেলের যেকোনও ভেন্ডর ইমেজ এই সিস্টেম ইমেজের সাথে ফ্ল্যাশ করা যাবে। এই প্রপার্টি সিস্টেম পার্টিশনে সেট করা আছে।

ro.vendor.api_level প্রপার্টি নিম্নলিখিত দুটি উপায়ের মধ্যে একটিতে পাওয়া যায়:

  • চিপসেটটি ভেন্ডর ফ্রিজের জন্য উপযুক্ত হলে:

    ro.vendor.api_level = min(
      ro.board.api_level,
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
    
  • চিপসেট ভেন্ডর ফ্রিজের অধীনে না থাকলে:

    ro.vendor.api_level =
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
    

AVendorSupport_getVendorApiLevelOf() পদ্ধতিটি SDK API লেভেল থেকে সংশ্লিষ্ট ভেন্ডর API লেভেল নির্ধারণ করে। যেমন AVendorSupport_getVendorApiLevelOf(35), যেখানে ২০২৪ সালে মেজর Android রিলিজের SDK API লেভেল 35, 202404 রিটার্ন করে, যা Android 14 QPR3-এর আনুমানিক তারিখ যখন বর্তমান ভেন্ডর API লেভেল সেট করা হয়েছিল।

ভেন্ডর API লেভেল নির্ধারণ করা (Android 13)

ভেন্ডর API লেভেল SDK API লেভেল অনুসরণ করে, যা হল অ্যাপ-OS ইন্টারফেস এবং AOSP-তে নতুন Android প্ল্যাটফর্ম রিলিজ করলে বছরে একবার আপডেট করা হয়।

Android 13-এ ভেন্ডর API লেভেল সম্পর্কিত নিম্নলিখিত সিস্টেম প্রপার্টি রয়েছে:

সিস্টেম প্রপার্টি ফর্ম্যাট বর্ণনা প্রাথমিক সেটিং
ro.board.first_api_level পূর্ণসংখ্যা চিপসেটের সফ্টওয়্যার যে ভেন্ডর API লেভেলে প্রথম রিলিজ করা হয়েছিল। এটি শুধুমাত্র চিপসেটের একটি ফাংশন এবং SoC ভেন্ডর বা OEM কেউই এটি পরিবর্তন করতে পারে না। এই প্রপার্টি শুধুমাত্র সেইসব চিপসেটের জন্য সেট করা হয় যেগুলি ভেন্ডর ফ্রিজের জন্য উপযুক্ত device.mk ফাইলে BOARD_SHIPPING_API_LEVEL সেট করার মাধ্যমে ভ্যালু নির্ধারণ করা হয়।
ro.board.api_level পূর্ণসংখ্যা চিপসেটের সফ্টওয়্যার যে ভেন্ডর API লেভেলে কাজ করে। এই প্রপার্টি শুধুমাত্র সেইসব চিপসেটের জন্য সেট করা হয় যেগুলি ভেন্ডর ফ্রিজের জন্য উপযুক্ত। প্রাথমিকভাবে, এই প্রপার্টির ভ্যালু বিল্ড সিস্টেমের মাধ্যমে ro.board.first_api_level-এর সমান ভ্যালুতে সেট করা হয়, তবে ভেন্ডর পার্টিশন আপগ্রেড করা হলে এটি আপডেট করা যেতে পারে।
ro.product.first_api_level পূর্ণসংখ্যা ডিভাইসটি প্রাথমিকভাবে যে SDK API লেভেলে লঞ্চ করা হয়েছে। এই প্রপার্টি OEM সেট করে এবং তারপরে OS আপগ্রেড করার পরেও এটি আর আপডেট করা হয় না।
ro.vendor.api_level পূর্ণসংখ্যা আগের সারণীতে উল্লিখিত ভেন্ডর API লেভেলের বিবরণের মতো।
ro.vndk.version পূর্ণসংখ্যা VNDK-এর যে ভার্সনের জন্য ভেন্ডর পার্টিশন তৈরি করা হয়েছে। এই প্রপার্টি ভেন্ডর পার্টিশনে সেট করা আছে।
ro.vendor.build.version.sdk পূর্ণসংখ্যা ভেন্ডর পার্টিশন তৈরি করা সোর্স ট্রি-এর SDK API লেভেল।