FCM লাইফসাইকেল

Android ফ্রেমওয়ার্ক রিলিজে একাধিক ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM) থাকে, প্রতিটি আপগ্রেড করা যায় এমন টার্গেট FCM ভার্সনের জন্য একটি করে, যা ফ্রেমওয়ার্ক কী ব্যবহার করতে পারে এবং টার্গেট FCM ভার্সনের প্রয়োজনীয়তা নির্ধারণ করে। FCM লাইফসাইকেলের অংশ হিসেবে, Android, HIDL HAL-কে বাতিল ও সরিয়ে দেয়, তারপর HAL ভার্সনের স্ট্যাটাস দেখানোর জন্য FCM ফাইল পরিবর্তন করে।

তাদের নিজস্ব ইকোসিস্টেমে শুধুমাত্র ফ্রেমওয়ার্ক OTA চালু করতে, যেসব পার্টনার ভেন্ডর ইন্টারফেস এক্সটেন্ড করেন তাদেরও একই পদ্ধতি ব্যবহার করে HIDL HAL-এর ব্যবহার বন্ধ করতে এবং সরিয়ে দিতে হবে।

পরিভাষা

ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM)
এমন একটি XML ফাইল যা কনফর্মিং ভেন্ডর ইমপ্লিমেন্টেশনে ফ্রেমওয়ার্ক সংক্রান্ত প্রয়োজনীয়তা নির্দিষ্ট করে। কম্প্যাটিবিলিটি ম্যাট্রিক্সের ভার্সন আছে এবং প্রতিটি ফ্রেমওয়ার্ক রিলিজের জন্য একটি নতুন ভার্সন ফ্রিজ করা হয়। প্রতিটি ফ্রেমওয়ার্ক রিলিজের মধ্যে একাধিক FCM থাকে।
প্ল্যাটফর্ম FCM ভার্সন (SF)
ফ্রেমওয়ার্ক রিলিজে থাকা সব FCM ভার্সনের সেট। এইসব FCM-এর মধ্যে যেকোনও একটি পূরণ করে এমন যেকোনও ভেন্ডর ইমপ্লিমেন্টেশনের সাথে ফ্রেমওয়ার্ক কাজ করতে পারে।
FCM ভার্সন (F)
ফ্রেমওয়ার্ক রিলিজে সব FCM-এর মধ্যে সবচেয়ে উন্নত ভার্সন।
টার্গেট FCM ভার্সন (V)
টার্গেট করা FCM ভার্সন (SF থেকে), যা ডিভাইস ম্যানিফেস্টে স্পষ্টভাবে ঘোষণা করা হয়েছে এবং যা ভেন্ডর ইমপ্লিমেন্টেশন পূরণ করে। প্রকাশিত FCM-এর বিপরীতে ভেন্ডর ইমপ্লিমেন্টেশন তৈরি করতে হবে। যদিও এটি নিজের ডিভাইস ম্যানিফেস্টে নতুন HAL ভার্সন ঘোষণা করতে পারে।
HAL ভার্সন
HAL ভার্সনের ফর্ম্যাট হল foo@x.y, যেখানে foo হল HAL-এর নাম এবং x.y হল নির্দিষ্ট ভার্সন; যেমন, nfc@1.0, keymaster@3.0 (রুট প্রিফিক্স, যেমন android.hardware, এই ডকুমেন্ট জুড়ে বাদ দেওয়া হয়েছে।)
ডিভাইস ম্যানিফেস্ট
XML ফাইল যা নির্দিষ্ট করে যে ভেন্ডর ইন্টারফেসের ডিভাইস সাইড কোন HAL ভার্সন, ভেন্ডর ও ODM ছবি সহ, প্রদান করে। ডিভাইস ম্যানিফেস্টের কন্টেন্ট ডিভাইসের টার্গেট FCM ভার্সন দ্বারা সীমাবদ্ধ থাকে, কিন্তু এতে এমন HAL-এর তালিকা থাকতে পারে যা V-এর সাথে সম্পর্কিত FC-এর তুলনায় অনেক বেশি নতুন।
ডিভাইস HAL
ডিভাইস ম্যানিফেস্টে তালিকাভুক্ত (প্রদান করা) এবং ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM)-এ তালিকাভুক্ত HAL.
ডিভাইস মানানসই ম্যাট্রিক্স (DCM)
কনফর্মিং ফ্রেমওয়ার্ক ইমপ্লিমেন্টেশনে ভেন্ডর সংক্রান্ত প্রয়োজনীয়তা নির্দিষ্ট করে এমন XML ফাইল। প্রতিটি ডিভাইসে একটি করে DCM থাকে।
ফ্রেমওয়ার্ক ম্যানিফেস্ট
একটি XML ফাইল যা নির্দিষ্ট করে যে ভেন্ডর ইন্টারফেসের ফ্রেমওয়ার্ক সাইড কোন HAL ভার্সন প্রদান করে, যার মধ্যে সিস্টেম, system_ext এবং প্রোডাক্টের ছবি অন্তর্ভুক্ত। ডিভাইসের টার্গেট FCM ভার্সন অনুযায়ী ফ্রেমওয়ার্ক ম্যানিফেস্টে থাকা HAL ডায়নামিক পদ্ধতিতে বন্ধ করা হয়।
ফ্রেমওয়ার্ক HAL
HAL যা ফ্রেমওয়ার্ক ম্যানিফেস্টে দেওয়া হিসেবে তালিকাভুক্ত এবং ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্সে (DCM) তালিকাভুক্ত।

কোডবেসে FCM লাইফসাইকেল

এই ডকুমেন্টে FCM লাইফসাইকেল সম্পর্কে সংক্ষেপে বর্ণনা করা হয়েছে। কাজ করে এমন ম্যানিফেস্ট দেখতে, hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml FCM কোথায় পাওয়া যায় তা system/libvintf/include/vintf/Level.h দেখুন।

সংশ্লিষ্ট Android রিলিজ ভার্সন সহ শিপিং করা ডিভাইসে FCM ভ্যালু সমতুল্য লেভেলের চেয়ে বেশি বা সমান হবে বলে আশা করা হয়। যেমন, Android 12 সহ শিপ করা ডিভাইসে সাধারণত FCM লেভেল ৬ থাকে, কিন্তু এটি FCM লেভেল ৭ বা তার বেশি ইমপ্লিমেন্ট করতে পারে, যা Android-এর আচরণ পরিবর্তন করে এবং কম্প্যাটিবিলিটি ম্যাট্রিক্সে নির্দিষ্ট করা নতুন ভেন্ডর API ব্যবহার করতে বাধ্য করে। Android 16-এর জন্য কাজ করে এমন লেভেলগুলি হল:

এফসিএম Android সংস্করণ
6 Android 12/S
7 Android 13/T
8 Android 14/U
202404 Android 15/V
202504 Android 16/B

FCM লেভেল Vendor API লেভেল-এর সমান বা তার থেকে নতুন।

Project Treble ঘোষণা করার সময়, Android সিস্টেম ইমেজকে ভেন্ডর ইমপ্লিমেন্টেশনের আগের তিনটি ভার্সনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবল (মোট চারটি) হিসেবে তৈরি করা হয়েছিল। ডিভাইসের লাইফটাইম আরও বেশি করার জন্য, এই সময়সীমা বাড়িয়ে দেওয়া হয়েছে। এর ফলে 202404 ও তার পরের ভার্সনের জন্য বর্তমান ও আগের ছয়টি FCM ভার্সন (মোট সাতটি) কাজ করবে।

Android কোনও FCM লেভেল বাতিল করে দিলেও, আগে থেকে থাকা ডিভাইসে সেগুলি কাজ করে। কম FCM লেভেল টার্গেট করা ডিভাইসগুলিকে, ব্রাঞ্চে উপলভ্য থাকলে, বেশি FCM লেভেলে তালিকাভুক্ত HAL ব্যবহার করার জন্য পরোক্ষভাবে অনুমতি দেওয়া হয়।

নতুন FCM ভার্সনে ডেভেলপ করুন

Android প্রতিটি ফ্রেমওয়ার্ক রিলিজের (যেমন Android 8 এবং 8.1) জন্য FCM ভার্সন ইনক্রিমেন্ট করে। ডেভেলপমেন্টের সময়, নতুন compatibility_matrix.F.xml তৈরি করা হয় এবং আগে থেকে থাকা compatibility_matrix.f.xml (যেখানে f < F) আর পরিবর্তন করা হয় না।

নতুন FCM ভার্সনে F ডেভেলপ করা শুরু করতে:

  1. লেটেস্ট compatibility_matrix.<F-1>.xml থেকে compatibility_matrix.F.xml-এ কপি করুন।
  2. ফাইলের level অ্যাট্রিবিউট আপডেট করে F করুন।
  3. ডিভাইসে এই কম্প্যাটিবিলিটি ম্যাট্রিক্স ইনস্টল করতে সংশ্লিষ্ট বিল্ড রুল যোগ করুন।

নতুন HAL চালু করা

ডেভেলপমেন্টের সময়, বর্তমান FCM ভার্সনে F Android-এ নতুন HAL (ওয়াই-ফাই, NFC ইত্যাদি) যোগ করার সময়, compatibility_matrix.F.xml-এ HAL যোগ করুন।

যেমন, Android 8.1-এ cas@1.0 ফিচারটি যোগ করা হয়েছে। Android 8.1-এর সাথে লঞ্চ হওয়া ডিভাইস এই HAL প্রয়োগ করতে পারে, তাই নিম্নলিখিত এন্ট্রি compatibility_matrix.F.xml-এ যোগ করা হয়েছে (যা ওই রিলিজের ডেভেলপমেন্টের সময় সাময়িকভাবে compatibility_matrix.current.xml নামে ব্যবহার করা হতো):

<hal format="hidl">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

HAL আপগ্রেড করুন (ছোটখাটো)

AIDL HAL ভার্সনগুলি মাইনর HAL ভার্সন হিসেবে গণ্য করা হয়। HIDL ইন্টারফেস ভার্সনে major.minorটি ভার্সন আছে, যেমন 1.2।

ডেভেলপমেন্টের সময়, বর্তমান FCM ভার্সন F-এ কোনও AIDL HAL-এর ভার্সন 2 থেকে 3-এ আপগ্রেড করা হলে, HAL এন্ট্রিতে compatibility_matrix.F.xml নতুন ভার্সন যোগ করা হয়। HAL এন্ট্রির ভার্সন ফিল্ডে 2-3-এর মতো রেঞ্জ গ্রহণ করা হয়।

যেমন, Android FCM F, HAL-এর মাইনর ভার্সন আপগ্রেড হিসেবে foo@3 নিয়ে এসেছে। পুরনো ভার্সন, foo@2, এর জন্য ব্যবহার করা হয় পুরনো FCM টার্গেট করা ডিভাইস, যেখানে নতুন ভার্সন, foo@3, Android FCM F টার্গেট করা ডিভাইসের জন্য ব্যবহার করা যেতে পারে। 2 ভার্সনের আগের পুরনো FCM-এ এন্ট্রি এইরকম দেখতে হয়:

<hal format="aidl">
    <name>foo</name>
    <version>2</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

এই এন্ট্রি compatibility_matrix.F.xml-এ কপি করা হয়েছে এবং নিম্নলিখিতভাবে 3 ভার্সন কাজ করার জন্য পরিবর্তন করা হয়েছে:

<hal format="aidl">
    <name>foo</name>
    <version>2-3</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

HAL আপগ্রেড করা (গুরুত্বপূর্ণ)

ডেভেলপমেন্টের সময়, কোনও HAL-এর বর্তমান FCM-এ মেজর-ভার্সন আপগ্রেড হলে ভার্সন F, নতুন মেজর ভার্সন x.0-কে compatibility_matrix.F.xml-এ নিম্নলিখিত সেটিংস সহ যোগ করা হয়:

  • শুধুমাত্র x.0 ভার্সন, যদি V = F-এর সাথে শিপ করা ডিভাইস x.0-এর সাথে লঞ্চ করতে হয়।
  • একই <hal> ট্যাগে থাকা পুরনো মেজর ভার্সনের ক্ষেত্রে, V = F সহ শিপ করা ডিভাইস পুরনো মেজর ভার্সন দিয়ে লঞ্চ করা যেতে পারে।

যেমন, FCM ভার্সন F-এ foo@2.0-কে 1.0 HAL-এর মেজর-ভার্সন আপগ্রেড হিসেবে পরিচয় করানো হয়েছে এবং 1.0 HAL-কে বাতিল করা হয়েছে। পুরনো ভার্সন, foo@1.0, আগের FCM ভার্সন টার্গেট করা ডিভাইসের জন্য ব্যবহার করা হয়। FCM ভার্সন টার্গেট করা ডিভাইস F HAL দিলে, সেগুলিকে অবশ্যই নতুন 2.0 ভার্সন দিতে হবে। এই উদাহরণে, আগের FCM ভার্সনে এই এন্ট্রি আছে:

<hal format="hidl">
    <name>foo</name>
    <version>1.0</version>;
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

compatibility_matrix.F.xml-এ এই এন্ট্রি কপি করুন এবং নিম্নলিখিত নিয়ম অনুযায়ী পরিবর্তন করুন:

<hal format="hidl">
    <name>foo</name>
    <version>2.0</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

সীমাবদ্ধতা:

  • যেহেতু 1.0 HAL compatibility_matrix.F.xml-এ নেই, FCM ভার্সন F টার্গেট করা ডিভাইসগুলিকে 1.0 HAL প্রদান করা উচিত নয় (কারণ এই HAL-কে পুরনো হিসেবে বিবেচনা করা হয়)।
  • কারণ, পুরনো FCM ভার্সনে 1.0 HAL থাকে, তাই ফ্রেমওয়ার্ক এখনও 1.0 HAL-এর সাথে কাজ করতে পারে। এর ফলে, এটি পুরনো FCM ভার্সন টার্গেট করা পুরনো ডিভাইসের সাথে ব্যাকওয়ার্ড কম্প্যাটিবল।

নতুন FCM ভার্সন

সিস্টেম পার্টিশনে FCM ভার্সন রিলিজ করার প্রসেসটি শুধুমাত্র Google-এর মাধ্যমে AOSP রিলিজের অংশ হিসেবে করা হয় এবং এতে নিম্নলিখিত ধাপগুলি অন্তর্ভুক্ত থাকে:

  1. compatibility_matrix.F.xml-এ level="F" অ্যাট্রিবিউট আছে কিনা তা নিশ্চিত করুন।
  2. সব ডিভাইস বিল্ড ও বুট করা নিশ্চিত করুন।
  3. লেটেস্ট ফ্রেমওয়ার্ক (শিপিং API লেভেলের উপর ভিত্তি করে) সহ লঞ্চ হওয়া ডিভাইসে টার্গেট FCM ভার্সন V >= F আছে কিনা তা নিশ্চিত করতে VTS টেস্ট আপডেট করুন।
  4. AOSP-তে ফাইল প্রকাশ করুন।

যেমন, VTS টেস্ট নিশ্চিত করে যে Android 9-এর সাথে লঞ্চ করা ডিভাইসগুলিতে টার্গেট FCM ভার্সন >= 3 আছে।

এছাড়াও, product এবং system_ext FCM, প্রতিটি প্ল্যাটফর্ম FCM ভার্সনের জন্য প্রয়োজনীয়তাও তালিকাভুক্ত করতে পারে। প্রোডাক্ট ও system_ext পার্টিশনে FCM ভার্সন রিলিজ করার কাজটি এইসব ছবির মালিকরা করেন। প্রোডাক্ট ও system_ext পার্টিশনে FCM ভার্সন নম্বর অবশ্যই সিস্টেম পার্টিশনের সাথে মানানসই হতে হবে। সিস্টেম পার্টিশনে FCM ভার্সনের মতো, প্রোডাক্ট ও system_ext পার্টিশনে FCM ভার্সন F-এর কম্প্যাটিবিলিটি ম্যাট্রিক্স টার্গেট FCM ভার্সন F সহ ডিভাইসের প্রয়োজনীয়তা দেখায়।

HAL ভার্সন বন্ধ হয়ে যাওয়া

HAL ভার্সন বন্ধ করার সিদ্ধান্ত ডেভেলপার নেন (যেমন, AOSP HAL-এর জন্য Google সিদ্ধান্ত নেয়)। এটি তখন হতে পারে যখন কোনও উচ্চতর HAL ভার্সন (মাইনর বা মেজর) প্রকাশ করা হয়।

ডিভাইস HAL বাতিল করা

FCM ভার্সন F-এ কোনও নির্দিষ্ট ডিভাইস HAL foo@x.y বন্ধ করে দেওয়া হলে, এর অর্থ হল টার্গেট FCM ভার্সন V = F বা তার পরবর্তী যেকোনও ভার্সন সহ লঞ্চ করা কোনও ডিভাইসে x.y ভার্সন বা x.y-এর আগের যেকোনও ভার্সনে foo প্রয়োগ করা যাবে না। পুরনো হয়ে যাওয়া HAL ভার্সন এখনও ডিভাইস আপগ্রেড করার জন্য ফ্রেমওয়ার্কে কাজ করে।

FCM ভার্সন F রিলিজ করা হলে, টার্গেট FCM ভার্সন V = F-এর জন্য লেটেস্ট FCM-এ নির্দিষ্ট HAL ভার্সন স্পষ্টভাবে উল্লেখ করা না থাকলে, HAL ভার্সন foo@x.y-কে পুরনো হয়ে গেছে বলে বিবেচনা করা হয়। V = F-এর সাথে লঞ্চ করা ডিভাইসের ক্ষেত্রে, নিম্নলিখিত শর্তগুলির মধ্যে একটি প্রযোজ্য:

  • ফ্রেমওয়ার্কের জন্য আরও উন্নত ভার্সন (মেজর বা মাইনর) প্রয়োজন;
  • ফ্রেমওয়ার্কে আর HAL-এর প্রয়োজন নেই।

যেমন, Android 9-এ, health@2.0-কে 1.0 HAL-এর মেজর ভার্সন আপগ্রেড হিসেবে প্রকাশ করা হয়েছে। health@1.0 compatibility_matrix.3.xml থেকে সরিয়ে দেওয়া হয়েছে, কিন্তু compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, এবং compatibility_matrix.2.xml-এ আছে। তাই, health@1.0 অবচিত হিসেবে বিবেচনা করা হয়।

ফ্রেমওয়ার্ক HAL বাতিল করা

কোনও ফ্রেমওয়ার্ক HAL foo@x.y, FCM ভার্সন F-এ বাতিল করা হলে, এর অর্থ হল টার্গেট FCM ভার্সন V = F বা এর পরবর্তী যেকোনও ভার্সন সহ লঞ্চ করা যেকোনও ডিভাইসকে x.y ভার্সনে বা x.y-এর আগের যেকোনও ভার্সনে ফ্রেমওয়ার্কের থেকে foo পাওয়ার আশা করা উচিত নয়। ডিভাইস আপগ্রেড করার জন্য ফ্রেমওয়ার্কের মাধ্যমে এখনও একটি বাতিল করা HAL ভার্সন প্রদান করা হয়।

FCM ভার্সন F রিলিজ করা হলে, HAL ভার্সন foo@x.y-কে সেকেলে হিসেবে বিবেচনা করা হয় যদি ফ্রেমওয়ার্ক ম্যানিফেস্টে foo@x.y-এর জন্য max-level="F - 1" উল্লেখ করা থাকে। V = F-এর সাথে লঞ্চ হওয়া ডিভাইসের জন্য, ফ্রেমওয়ার্ক HAL foo@x.y প্রদান করে না। V = F-এর সাথে লঞ্চ হওয়া ডিভাইসের ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্সে max-level < V-এর সাথে ফ্রেমওয়ার্ক HAL-এর তালিকা থাকলে চলবে না।

যেমন, Android 12-এ, schedulerservice@1.0 বন্ধ করে দেওয়া হয়েছে। এটির max-level অ্যাট্রিবিউট 5-এ সেট করা আছে, FCM ভার্সন Android 11-এ প্রথমবার চালু করা হয়েছে। Android 12 ফ্রেমওয়ার্ক মেনিফেস্ট দেখুন।

টার্গেট FCM ভার্সনের জন্য সহায়তা সরিয়ে দেওয়া

প্রয়োজনীয় সময়সীমার জন্য কম্প্যাটিবিলিটি বজায় রাখতে এবং দীর্ঘস্থায়ী ডিভাইসের জন্য পার্টনারের প্রয়োজনীয়তা পূরণ করতে, আমরা শিডিউল-ভিত্তিক প্রসেস ব্যবহার করে টার্গেট FCM ভার্সন সরিয়ে দেওয়ার সিদ্ধান্ত নিই।

পরবর্তী ফ্রেমওয়ার্ক রিলিজের SF সেট থেকে টার্গেট FCM ভার্সন সরিয়ে দেওয়ার সময়, আমরা নিম্নলিখিত দুটি ধাপই সম্পূর্ণ করি:

  1. বিল্ড রুল থেকে compatibility_matrix.V.xml সরিয়ে দিন (যাতে এটি সিস্টেম ইমেজে ইনস্টল না হয়) এবং সরিয়ে দেওয়া ক্ষমতার উপর নির্ভর করে বা তা প্রয়োগ করে এমন যেকোনও কোড মুছে দিন।

  2. ফ্রেমওয়ার্ক ম্যানিফেস্ট থেকে max-level-এর চেয়ে কম বা V-এর সমান ভার্সনের ফ্রেমওয়ার্ক HAL সরিয়ে দিন এবং সরিয়ে দেওয়া ফ্রেমওয়ার্ক HAL প্রয়োগ করা যেকোনও কোড মুছে দিন।

রিলিজ কনফিগারেশনের জন্য ধাপে ধাপে বন্ধ করা

Trunk Stable-এর ব্রাঞ্চিং স্ট্র্যাটেজি, যেখানে ত্রৈমাসিক প্ল্যাটফর্ম রিলিজ (QPR) আলাদা রিলিজ-ডেভ ব্রাঞ্চের পরিবর্তে সরাসরি git_main থেকে নেওয়া হয়, সেখানে একটি স্ট্যাগার্ড ডেপ্রিকেশন প্রসেস প্রয়োজন। trunk_staging বিল্ডে আগাম সিগন্যালের জন্য FCM ভার্সন সরিয়ে দেওয়া হতে পারে, তবে রিলিজ ব্রাঞ্চে এটি কাজ করবে যাতে সারা বছর ধরে QPR নেওয়া ডিভাইসে এটি ব্যবহার করা যায়।

সাধারণত, একটি ফ্রেমওয়ার্ক রিলিজ ছয়টি FCM-এ কাজ করে: একটি বর্তমান ভার্সন, চারটি আগের ভার্সন এবং QPR-এ কাজ করার জন্য একটি অতিরিক্ত ভার্সন। নির্দিষ্ট FCM ভার্সন (যেমন, Android 15-এর 202404) ডিভাইসের দীর্ঘস্থায়ী ব্যবহারের জন্য বর্ধিত সহায়তা প্রদান করলে এই সংখ্যা বেড়ে যেতে পারে।

নির্দিষ্ট ফ্রেমওয়ার্কের জন্য SF-এর বাইরের টার্গেট FCM ভার্সন সহ ডিভাইস সেই রিলিজে আপগ্রেড করতে পারবে না।

সম্পূর্ণভাবে বন্ধ হয়ে যাওয়া HAL সরিয়ে দেওয়া

FCM ভার্সন সরিয়ে দেওয়া হলে, কিছু HAL ইন্টারফেস বা HAL ইন্টারফেসের ভার্সন আর কোনও FCM-এ থাকে না। এর অর্থ হল, Android আর সেগুলিকে কোনওভাবেই সাপোর্ট করে না, এমনকি ডিভাইস আপগ্রেড করার জন্যও নয়।

কোনও HAL আর কাজ না করলে, ডেভেলপাররা Android থেকে সেই HAL ইন্টারফেসের রেফারেন্স সরিয়ে দেন। এর মধ্যে ফ্রেমওয়ার্কের ক্লায়েন্ট কোড, ডিফল্ট ইমপ্লিমেন্টেশন ও VTS টেস্ট কেস অন্তর্ভুক্ত।

যে HAL সরানো হচ্ছে, সেটি থেকে ইনহেরিট করা কোনও কাজ করে এমন HAL না থাকলে, HAL-এর সংজ্ঞা নিজেই কিছু অতিরিক্ত ধাপের মাধ্যমে সরানো যেতে পারে।

  1. সোর্স কোড থেকে HAL ইন্টারফেসের সংজ্ঞা সরিয়ে দিন। এর মধ্যে *.aidl ফাইল ও Android.bp aidl_interface মডিউল অন্তর্ভুক্ত।
  2. HIDL হলে, hardware/interfaces/current.txt থেকে HASH সরিয়ে দিন।
  3. AIDL হলে, ফ্রোজেন AIDL ফাইল সহ aidl_api ডিরেক্টরি সরিয়ে দিন।
  4. hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp থেকে ইন্টারফেস সরিয়ে দিন।

HAL ভার্সন স্ট্যাটাস

নিম্নলিখিত বিভাগে HAL ভার্সনের সম্ভাব্য স্ট্যাটাস (ক্রম অনুযায়ী) বর্ণনা করা হয়েছে।

অপ্রকাশিত

ডিভাইস HAL-এর ক্ষেত্রে, কোনও HAL ভার্সন যদি কোনও পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে না থাকে, তাহলে এটি রিলিজ করা হয়নি বলে ধরে নেওয়া হয় এবং সম্ভবত এটি ডেভেলপ করা হচ্ছে। এর মধ্যে HAL ভার্সন অন্তর্ভুক্ত যা শুধুমাত্র compatibility_matrix.F.xml-এ আছে। উদাহরণ:

  • Android 9 ডেভেলপ করার সময় health@2.0 HAL-কে রিলিজ না করা HAL হিসেবে বিবেচনা করা হয়েছিল এবং এটি শুধুমাত্র compatibility_matrix.3.xml-এ উপস্থিত ছিল।
  • teleportation@1.0 HAL কোনও প্রকাশিত মানানসই ম্যাট্রিক্সে নেই এবং এটি একটি অপ্রকাশিত HAL হিসেবেও বিবেচিত হয়।

ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, কোনও HAL ভার্সন যদি শুধুমাত্র কোনও সম্পর্কহীন ডেভেলপমেন্ট ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে থাকে, তাহলে সেটি রিলিজ করা হয়নি বলে ধরে নেওয়া হয়।

রিলিজ করা হয়েছে এবং বর্তমান

ডিভাইস HAL-এর জন্য, কোনও HAL ভার্সন যদি কোনও পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে থাকে, তাহলে সেটি রিলিজ করা হয়। যেমন, FCM ভার্সন ৩ ফ্রোজেন ও AOSP-তে প্রকাশ করার পরে health@2.0 HAL-কে প্রকাশিত ও বর্তমান HAL ভার্সন হিসেবে বিবেচনা করা হয়।

কোনও HAL ভার্সন যদি সর্বজনীন ও ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে থাকে এবং সেটির FCM ভার্সন সবচেয়ে বেশি হয়, তাহলে HAL ভার্সনটি বর্তমান (অর্থাৎ, আর ব্যবহার করা হয় না এমন নয়)। যেমন, আগে থেকে থাকা HAL ভার্সন (যেমন, nfc@1.0 যা compatibility_matrix.legacy.xml-এ প্রকাশ করা হয়েছে) যা compatibility_matrix.3.xml-এ এখনও আছে, সেগুলিকেও প্রকাশিত ও বর্তমান HAL ভার্সন হিসেবে বিবেচনা করা হয়।

ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, কোনও HAL ভার্সন যদি লেটেস্ট রিলিজ করা ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে max-level অ্যাট্রিবিউট ছাড়া থাকে অথবা (অস্বাভাবিকভাবে) এই ব্রাঞ্চে রিলিজ করা FCM ভার্সনের সমান বা তার থেকে বেশি max-level থাকে, তাহলে এটিকে রিলিজ করা এবং বর্তমান HAL ভার্সন হিসেবে বিবেচনা করা হয়। যেমন, displayservice HAL রিলিজ করা হয়েছে এবং Android 12-এ বর্তমান আছে, যা Android 12 ফ্রেমওয়ার্ক মেনিফেস্ট-এ উল্লেখ করা হয়েছে।

রিলিজ করা হয়েছে কিন্তু বন্ধ করে দেওয়া হয়েছে

ডিভাইস HAL-এর জন্য, কোনও HAL ভার্সন তখনই বাতিল করা হয় যখন নিম্নলিখিত সবগুলি পূরণ হয়:

  • এটি রিলিজ করা হয়েছে।
  • এটি পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে নেই, যেখানে সবচেয়ে বেশি FCM ভার্সন আছে।
  • এটি একটি সর্বজনীন ও ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে আছে যা ফ্রেমওয়ার্ক এখনও সাপোর্ট করে।

উদাহরণ:

তাই, Android 9-এ power@1.0 বর্তমান, কিন্তু পুরনো হয়ে যায়নি।

ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, কোনও HAL ভার্সন যদি লেটেস্ট রিলিজ করা ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে থাকে এবং এই ব্রাঞ্চে রিলিজ করা FCM ভার্সনের চেয়ে max-level অ্যাট্রিবিউট কম হয়, তাহলে এটিকে রিলিজ করা হয়েছে কিন্তু বন্ধ করে দেওয়া হয়েছে এমন HAL ভার্সন হিসেবে বিবেচনা করা হয়। যেমন, schedulerservice HAL রিলিজ করা হয়েছে কিন্তু Android 12 ফ্রেমওয়ার্ক ম্যানিফেস্ট অনুযায়ী Android 12-এ এটি আর ব্যবহার করা যাবে না।

সরানো হয়েছে

ডিভাইস HAL-এর জন্য, নিম্নলিখিত সত্য হলে এবং শুধুমাত্র তখনই HAL ভার্সন সরিয়ে দেওয়া হয়:

  • এটি আগে প্রকাশ করা হয়েছে।
  • ফ্রেমওয়ার্ক কাজ করে এমন কোনও সর্বজনীন ও ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে এটি নেই।

যেসব কম্প্যাটিবিলিটি ম্যাট্রিক্স সর্বজনীন, ফ্রোজেন, কিন্তু ফ্রেমওয়ার্ক দ্বারা সমর্থিত নয়, সেগুলি কোডবেসে রাখা হয় যাতে সরানো HAL ভার্সন সেটকে সংজ্ঞায়িত করা যায়, যাতে VTS টেস্ট লিখে নিশ্চিত করা যায় যে সরানো HAL নতুন ডিভাইসে নেই।

ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, HAL ভার্সন তখনই সরানো হয় যখন নিম্নলিখিত শর্তগুলি পূরণ হয়:

  • এটি আগে প্রকাশ করা হয়েছে।
  • এটি লেটেস্ট রিলিজ করা শাখার কোনও ফ্রেমওয়ার্ক ম্যানিফেস্টে নেই।

পুরনো FCM

Target FCM Version legacy হল Treble নয় এমন সব ডিভাইসের জন্য একটি বিশেষ ভ্যালু। পুরনো FCM, compatibility_matrix.legacy.xml, পুরনো ডিভাইসে (যেমন, Android 8.0-এর আগে লঞ্চ হওয়া ডিভাইস) ফ্রেমওয়ার্কের প্রয়োজনীয়তা তালিকাভুক্ত করে।

F ভার্সনের FCM-এর জন্য এই ফাইলটি থাকলে, যেকোনও নন-Treble ডিভাইসকে F-এ আপগ্রেড করা যেতে পারে, তবে এর ডিভাইস ম্যানিফেস্ট এই ফাইলের সাথে মানানসই হতে হবে। এটি সরানোর প্রক্রিয়া অন্যান্য টার্গেট FCM ভার্সনের FCM-এর মতোই (অ্যাক্টিভ প্রি-৮.০ ডিভাইসের সংখ্যা নির্দিষ্ট থ্রেশহোল্ডের নিচে নেমে গেলে সরানো হয়)।

রিলিজ করা FCM ভার্সন

রিলিজ করা FCM ভার্সনের তালিকা hardware/interfaces/compatibility_matrices-এ পাওয়া যাবে।

নির্দিষ্ট Android রিলিজের সাথে রিলিজ করা FCM ভার্সন খুঁজে পেতে, Level.h দেখুন।