একটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক রিলিজে একাধিক ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM) থাকে, প্রতিটি আপগ্রেডযোগ্য টার্গেট FCM ভার্সনের জন্য একটি করে, যা নির্ধারণ করে যে ফ্রেমওয়ার্কটি কী ব্যবহার করতে পারে এবং টার্গেট FCM ভার্সনের জন্য কী কী প্রয়োজনীয়তা রয়েছে। FCM লাইফসাইকেলের অংশ হিসেবে, অ্যান্ড্রয়েড HIDL HAL-গুলোকে অপ্রচলিত ঘোষণা করে ও সরিয়ে দেয়, এবং তারপর HAL ভার্সনের অবস্থা প্রতিফলিত করার জন্য FCM ফাইলগুলো পরিবর্তন করে।
নিজেদের ইকোসিস্টেমে ফ্রেমওয়ার্ক-ভিত্তিক ওটিএ সক্ষম করার জন্য, যেসব পার্টনার ভেন্ডর ইন্টারফেস সম্প্রসারণ করে, তাদেরও একই পদ্ধতি ব্যবহার করে HIDL HAL-গুলোকে অপ্রচলিত ঘোষণা করে অপসারণ করা উচিত।
পরিভাষা
- ফ্রেমওয়ার্ক সামঞ্জস্য ম্যাট্রিক্স (FCM)
- একটি XML ফাইল যা সঙ্গতিপূর্ণ ভেন্ডর ইমপ্লিমেন্টেশনগুলোর জন্য ফ্রেমওয়ার্কের আবশ্যকতাগুলো নির্দিষ্ট করে। কম্প্যাটিবিলিটি ম্যাট্রিক্সটির ভার্সন করা থাকে এবং প্রতিটি ফ্রেমওয়ার্ক রিলিজের জন্য একটি নতুন ভার্সন চূড়ান্ত করা হয়। প্রতিটি ফ্রেমওয়ার্ক রিলিজে একাধিক FCM থাকে।
- প্ল্যাটফর্ম এফসিএম সংস্করণ (এস এফ )
- একটি ফ্রেমওয়ার্ক রিলিজে থাকা সমস্ত এফসিএম ভার্সনের সমষ্টি। ফ্রেমওয়ার্কটি এমন যেকোনো ভেন্ডর ইমপ্লিমেন্টেশনের সাথে কাজ করতে পারে যা এই এফসিএমগুলোর মধ্যে যেকোনো একটিকে পূরণ করে।
- এফসিএম সংস্করণ (এফ)
- একটি ফ্রেমওয়ার্ক রিলিজে থাকা সমস্ত এফসিএম-এর মধ্যে সর্বোচ্চ সংস্করণ।
- টার্গেট এফসিএম সংস্করণ (V)
- ডিভাইস ম্যানিফেস্টে স্পষ্টভাবে ঘোষিত লক্ষ্যযুক্ত এফসিএম সংস্করণ ( এসএফ থেকে), যা একটি ভেন্ডর ইমপ্লিমেন্টেশন পূরণ করে। একটি ভেন্ডর ইমপ্লিমেন্টেশন অবশ্যই একটি প্রকাশিত এফসিএম-এর বিপরীতে তৈরি করতে হবে, যদিও এটি তার ডিভাইস ম্যানিফেস্টে নতুনতর এইচএএল সংস্করণ ঘোষণা করতে পারে।
- এইচএএল সংস্করণ
- একটি HAL ভার্সনের ফরম্যাট হলো
foo@xy, যেখানেfooহলো HAL-এর নাম এবংxyহলো নির্দিষ্ট ভার্সন; যেমনnfc@1.0,keymaster@3.0(এই ডকুমেন্ট জুড়ে রুট প্রিফিক্স, যেমনandroid.hardware, বাদ দেওয়া হয়েছে।) - ডিভাইস ম্যানিফেস্ট
- এক্সএমএল ফাইল যা নির্দিষ্ট করে যে ভেন্ডর ইন্টারফেসের ডিভাইস সাইড, যার মধ্যে ভেন্ডর এবং ওডিএম ইমেজ অন্তর্ভুক্ত, কোন কোন এইচএএল সংস্করণ সরবরাহ করে। একটি ডিভাইস ম্যানিফেস্টের বিষয়বস্তু ডিভাইসটির টার্গেট এফসিএম সংস্করণ দ্বারা সীমাবদ্ধ থাকে, কিন্তু এটি V-এর সাথে সম্পর্কিত এফসি-এর তুলনায় কঠোরভাবে নতুন এইচএএল-গুলোকেও তালিকাভুক্ত করতে পারে।
- ডিভাইস HALs
- যেসব HAL ডিভাইস ম্যানিফেস্টে তালিকাভুক্ত (প্রদত্ত) এবং ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্সে (FCM) তালিকাভুক্ত রয়েছে।
- ডিভাইস সামঞ্জস্য ম্যাট্রিক্স (DCM)
- একটি এক্সএমএল ফাইল যা সঙ্গতিপূর্ণ ফ্রেমওয়ার্ক বাস্তবায়নের ক্ষেত্রে বিক্রেতার প্রয়োজনীয়তা নির্দিষ্ট করে। প্রতিটি ডিভাইসে একটি ডিসিএম থাকে।
- ফ্রেমওয়ার্ক ম্যানিফেস্ট
- একটি XML ফাইল যা নির্দিষ্ট করে দেয় যে ভেন্ডর ইন্টারফেসের ফ্রেমওয়ার্ক অংশ (সিস্টেম, সিস্টেম_এক্সট, এবং প্রোডাক্ট ইমেজ সহ) কোন কোন HAL সংস্করণ সরবরাহ করে। ফ্রেমওয়ার্ক ম্যানিফেস্টের HAL-গুলো ডিভাইসের টার্গেট FCM সংস্করণ অনুযায়ী গতিশীলভাবে নিষ্ক্রিয় করা হয়।
- ফ্রেমওয়ার্ক HALs
- HAL-গুলো, যেগুলো ফ্রেমওয়ার্ক ম্যানিফেস্টে প্রদত্ত হিসাবে এবং ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্সে (DCM) তালিকাভুক্ত রয়েছে।
কোডবেসে FCM জীবনচক্র
এই ডকুমেন্টে সারসংক্ষেপে FCM-এর জীবনচক্র বর্ণনা করা হয়েছে। সমর্থিত ম্যানিফেস্টগুলো দেখতে hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml দেখুন, যেখানে FCM-কে system/libvintf/include/vintf/Level.h ফাইলে খুঁজে পাওয়া যাবে।
যে ডিভাইসে সংশ্লিষ্ট অ্যান্ড্রয়েড রিলিজ সংস্করণটি রয়েছে, সেটির FCM মান সমতুল্য লেভেলের চেয়ে বেশি বা সমান হবে বলে আশা করা হয়। উদাহরণস্বরূপ, অ্যান্ড্রয়েড ১২ সহ আসা একটি ডিভাইসে সাধারণত FCM লেভেল ৬ থাকে, কিন্তু এটি FCM লেভেল ৭ বা তার বেশি প্রয়োগ করতে পারে, যা অ্যান্ড্রয়েডের আচরণ পরিবর্তন করে এবং কম্প্যাটিবিলিটি ম্যাট্রিক্সে নির্দিষ্ট করা অনুযায়ী নতুন ভেন্ডর এপিআই ব্যবহার করতে বাধ্য করে। অ্যান্ড্রয়েড ১৬-এর জন্য সমর্থিত লেভেলগুলো হলো:
| এফসিএম | অ্যান্ড্রয়েড সংস্করণ |
|---|---|
| ৬ | অ্যান্ড্রয়েড ১২/এস |
| ৭ | অ্যান্ড্রয়েড ১৩/টি |
| ৮ | অ্যান্ড্রয়েড ১৪/ইউ |
| ২০২৪০৪ | অ্যান্ড্রয়েড ১৫/ভি |
| ২০২৫০৪ | অ্যান্ড্রয়েড ১৬/বি |
FCM লেভেলটি ভেন্ডর API লেভেলের সমান বা তার চেয়ে নতুন।
যখন প্রজেক্ট ট্রিবল ঘোষণা করা হয়েছিল, তখন অ্যান্ড্রয়েড সিস্টেম ইমেজগুলো ভেন্ডর ইমপ্লিমেন্টেশনের পূর্ববর্তী তিনটি সংস্করণের (মোট চারটি) সাথে ব্যাকওয়ার্ড কম্প্যাটিবল বা পশ্চাৎমুখী সামঞ্জস্যপূর্ণ করে তৈরি করা হয়েছিল। ডিভাইসের দীর্ঘতর জীবনকাল নিশ্চিত করার জন্য, 202404 এবং তার পরবর্তী সংস্করণগুলোর জন্য এই পরিধি বাড়িয়ে বর্তমান এবং পূর্ববর্তী ছয়টি এফসিএম সংস্করণকে (মোট সাতটি) সমর্থন করার ব্যবস্থা করা হয়েছে।
যখন অ্যান্ড্রয়েড কোনো FCM লেভেলকে অপ্রচলিত ঘোষণা করে, তখনও বিদ্যমান ডিভাইসগুলোর জন্য সেগুলোর সাপোর্ট চালু থাকে। নিম্ন FCM লেভেলকে টার্গেট করা ডিভাইসগুলো পরোক্ষভাবে উচ্চ FCM লেভেলে তালিকাভুক্ত HAL ব্যবহার করতে পারে, যতক্ষণ পর্যন্ত সেগুলো ব্রাঞ্চে উপলব্ধ থাকে।
একটি নতুন FCM সংস্করণে তৈরি করুন
অ্যান্ড্রয়েড প্রতিটি ফ্রেমওয়ার্ক রিলিজের জন্য এফসিএম (FCM) ভার্সন বৃদ্ধি করে (যেমন অ্যান্ড্রয়েড ৮ এবং ৮.১)। ডেভেলপমেন্টের সময়, নতুন compatibility_matrix.F.xml ফাইলটি তৈরি করা হয় এবং বিদ্যমান compatibility_matrix.f.xml (যেখানে f < F ) আর পরিবর্তন করা হয় না।
নতুন FCM ভার্সন F এ উন্নয়ন শুরু করতে:
- সর্বশেষ
compatibility_matrix.<F-1>.xmlফাইলটিcompatibility_matrix.F.xmlএ কপি করুন। - ফাইলটিতে
levelঅ্যাট্রিবিউটটিFএ আপডেট করুন। - ডিভাইসটিতে এই সামঞ্জস্য ম্যাট্রিক্সটি ইনস্টল করতে সংশ্লিষ্ট বিল্ড নিয়মগুলো যোগ করুন।
একটি নতুন HAL চালু করুন
ডেভেলপমেন্টের সময়, বর্তমান FCM ভার্সন F এ অ্যান্ড্রয়েডে কোনো নতুন HAL (যেমন Wi-Fi, NFC ইত্যাদি) যুক্ত করার সময়, HAL-টিকে compatibility_matrix.F.xml ফাইলে যোগ করুন।
উদাহরণস্বরূপ, অ্যান্ড্রয়েড ৮.১-এ cas@1.0 চালু করা হয়েছিল। অ্যান্ড্রয়েড ৮.১ সহ চালু হওয়া ডিভাইসগুলো এই 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 আপগ্রেড করা হয়, তখন নতুন ভার্সনটি compatibility_matrix.F.xml এ থাকা HAL এন্ট্রিতে যোগ করা হয়। একটি HAL এন্ট্রির ভার্সন ফিল্ডটি 2-3 মতো রেঞ্জ গ্রহণ করে।
উদাহরণস্বরূপ, অ্যান্ড্রয়েড এফসিএম F এইচএএল-এর একটি মাইনর ভার্সন আপগ্রেড হিসেবে foo@3 চালু করেছে। পুরোনো সংস্করণ, foo@2 , পুরোনো এফসিএম-গুলোকে টার্গেট করা ডিভাইসগুলোর জন্য ব্যবহৃত হয়, আর নতুন সংস্করণ, foo@3 , অ্যান্ড্রয়েড এফসিএম F কে টার্গেট করা ডিভাইসগুলোর জন্য ব্যবহার করা যেতে পারে। সংস্করণ 2 আগের পুরোনো এফসিএম-গুলোতে এন্ট্রিটি দেখতে এইরকম:
<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 , 1.0 HAL-এর একটি প্রধান-সংস্করণ আপগ্রেড হিসাবে foo@2.0 চালু করে এবং 1.0 HAL-কে অপ্রচলিত ঘোষণা করে। পুরোনো সংস্করণ, foo@1.0 , পূর্ববর্তী FCM সংস্করণগুলোকে লক্ষ্য করে তৈরি ডিভাইসগুলোর জন্য ব্যবহৃত হয়। FCM সংস্করণ F কে লক্ষ্য করে তৈরি ডিভাইসগুলোকে অবশ্যই নতুন 2.0 সংস্করণটি সরবরাহ করতে হবে, যদি তারা HAL সরবরাহ করে। এই উদাহরণে, পূর্ববর্তী 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-টি অপ্রচলিত বলে বিবেচিত)। - যেহেতু 1.0 HAL পুরোনো FCM সংস্করণগুলিতে উপস্থিত রয়েছে, তাই ফ্রেমওয়ার্কটি এখনও 1.0 HAL-এর সাথে কাজ করতে পারে, ফলে এটি পুরোনো FCM সংস্করণগুলিকে লক্ষ্য করে তৈরি পুরোনো ডিভাইসগুলির সাথে পশ্চাৎমুখী সামঞ্জস্যপূর্ণ।
নতুন এফসিএম সংস্করণ
সিস্টেম পার্টিশনে একটি এফসিএম ভার্সন রিলিজ করার প্রক্রিয়াটি এওএসপি রিলিজের অংশ হিসেবে শুধুমাত্র গুগল দ্বারা সম্পন্ন করা হয় এবং এতে নিম্নলিখিত ধাপগুলো অন্তর্ভুক্ত থাকে:
- নিশ্চিত করুন যে
compatibility_matrix.F.xmlফাইলটিতেlevel="F"অ্যাট্রিবিউটটি রয়েছে। - সকল ডিভাইস বিল্ড এবং বুট হওয়া নিশ্চিত করুন।
- VTS টেস্টগুলো আপডেট করুন যাতে সর্বশেষ ফ্রেমওয়ার্ক (শিপিং এপিআই লেভেলের উপর ভিত্তি করে) দিয়ে লঞ্চ হওয়া ডিভাইসগুলোর টার্গেট এফসিএম ভার্সন
V >= Fহয়। - AOSP-তে ফাইলটি প্রকাশ করুন।
উদাহরণস্বরূপ, VTS পরীক্ষাগুলো নিশ্চিত করে যে Android 9 সহ চালু হওয়া ডিভাইসগুলোর Target FCM Version >= 3 রয়েছে।
এছাড়াও, প্রোডাক্ট এবং সিস্টেম_এক্সট এফসিএম-গুলোতে প্রতিটি প্ল্যাটফর্ম এফসিএম ভার্সনের জন্য প্রয়োজনীয়তা তালিকাভুক্ত থাকতে পারে। প্রোডাক্ট এবং সিস্টেম_এক্সট পার্টিশনে এফসিএম ভার্সনগুলো যথাক্রমে এই ইমেজগুলোর মালিক দ্বারা রিলিজ করা হয়। প্রোডাক্ট এবং সিস্টেম_এক্সট পার্টিশনের এফসিএম ভার্সন নম্বরগুলো অবশ্যই সিস্টেম পার্টিশনের নম্বরগুলোর সাথে সামঞ্জস্যপূর্ণ হতে হবে। সিস্টেম পার্টিশনের এফসিএম ভার্সনগুলোর মতোই, প্রোডাক্ট এবং সিস্টেম_এক্সট পার্টিশনে এফসিএম ভার্সন F-এর কম্প্যাটিবিলিটি ম্যাট্রিক্সটি টার্গেট এফসিএম ভার্সন F সহ একটি ডিভাইসের জন্য প্রয়োজনীয়তাগুলো প্রতিফলিত করে।
HAL সংস্করণ বাতিল
একটি HAL সংস্করণ বাতিল করা ডেভেলপারদের সিদ্ধান্ত (যেমন, AOSP HAL-এর ক্ষেত্রে এই সিদ্ধান্ত গুগল নেয়)। যখন একটি উচ্চতর HAL সংস্করণ (মাইনর বা মেজর) প্রকাশিত হয়, তখন এটি ঘটতে পারে।
একটি ডিভাইস HAL বাতিল করুন
যখন কোনো নির্দিষ্ট ডিভাইস HAL foo@xy কে FCM ভার্সন F এ ডেপ্রিকেটেড (deprecated) করা হয়, তার মানে হলো, টার্গেট FCM ভার্সন V = F বা তার পরবর্তী ভার্সন দিয়ে চালু হওয়া কোনো ডিভাইসকে অবশ্যই xy ভার্সনে বা xy এর চেয়ে পুরোনো কোনো ভার্সনে foo ইমপ্লিমেন্ট করা যাবে না। একটি ডেপ্রিকেটেড HAL ভার্সনও ডিভাইস আপগ্রেড করার জন্য ফ্রেমওয়ার্ক দ্বারা সমর্থিত থাকে।
যখন FCM ভার্সন F প্রকাশিত হয়, তখন একটি HAL ভার্সন foo@xy ডেপ্রিকেটেড (deprecated) বলে গণ্য করা হয়, যদি টার্গেট FCM ভার্সন V = F এর জন্য সর্বশেষ FCM-এ নির্দিষ্ট HAL ভার্সনটি স্পষ্টভাবে উল্লেখ না থাকে। V = F দিয়ে চালু হওয়া ডিভাইসগুলির জন্য, নিম্নলিখিত শর্তগুলির মধ্যে একটি সত্য হয়:
- ফ্রেমওয়ার্কটির জন্য একটি উচ্চতর সংস্করণ (মেজর বা মাইনর) প্রয়োজন;
- ফ্রেমওয়ার্কটির জন্য এখন আর HAL-এর প্রয়োজন নেই।
উদাহরণস্বরূপ, অ্যান্ড্রয়েড ৯-এ, 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 অপ্রচলিত (deprecated) হিসেবে বিবেচনা করা হয়।
HAL ফ্রেমওয়ার্কটি বাতিল করুন
যখন কোনো নির্দিষ্ট ফ্রেমওয়ার্ক HAL foo@xy FCM ভার্সন F এ ডেপ্রিকেটেড (deprecated) করা হয়, তার মানে হলো, যে ডিভাইসগুলো টার্গেট FCM ভার্সন V = F বা তার পরবর্তী ভার্সন দিয়ে লঞ্চ হচ্ছে, তাদের ফ্রেমওয়ার্ক থেকে xy ভার্সনের বা xy চেয়ে পুরোনো কোনো ভার্সনের foo পাওয়ার আশা করা উচিত নয়। ডিভাইস আপগ্রেড করার জন্য ফ্রেমওয়ার্কটি একটি ডেপ্রিকেটেড HAL ভার্সনও সরবরাহ করে থাকে।
যখন FCM সংস্করণ F প্রকাশিত হয়, তখন একটি HAL সংস্করণ foo@xy কে অপ্রচলিত (deprecated) বলে গণ্য করা হয়, যদি ফ্রেমওয়ার্ক ম্যানিফেস্টে foo@xy এর জন্য max-level=" F - 1 " নির্দিষ্ট করা থাকে। V = F দিয়ে চালু হওয়া ডিভাইসগুলির জন্য, ফ্রেমওয়ার্ক foo@xy HAL-টি সরবরাহ করে না। V = F দিয়ে চালু হওয়া ডিভাইসগুলির ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্সে অবশ্যই max-level < V সহ ফ্রেমওয়ার্ক HAL-গুলি তালিকাভুক্ত করা যাবে না।
উদাহরণস্বরূপ, অ্যান্ড্রয়েড ১২-এ schedulerservice@1.0 অপ্রচলিত (deprecated) করা হয়েছে। এর max-level অ্যাট্রিবিউটটি 5 এ সেট করা হয়েছে, যা অ্যান্ড্রয়েড ১১-এ প্রবর্তিত FCM সংস্করণ । অ্যান্ড্রয়েড ১২ ফ্রেমওয়ার্ক ম্যানিফেস্ট দেখুন।
টার্গেট এফসিএম সংস্করণগুলির জন্য সমর্থন অপসারণ
প্রয়োজনীয় সময়কাল ধরে সামঞ্জস্যতা বজায় রাখতে এবং দীর্ঘস্থায়ী ডিভাইসের জন্য অংশীদারদের চাহিদা মেটাতে, আমরা নির্দিষ্ট এফসিএম সংস্করণ অপসারণ নির্ধারণের জন্য একটি সময়সূচি-ভিত্তিক প্রক্রিয়া ব্যবহার করি।
যখন আমরা পরবর্তী ফ্রেমওয়ার্ক রিলিজের সেট S F থেকে কোনো টার্গেট FCM ভার্সন সরিয়ে ফেলি, তখন আমরা নিম্নলিখিত উভয় ধাপই সম্পাদন করি:
বিল্ড রুলস থেকে
compatibility_matrix.V.xmlসরিয়ে ফেলুন (যাতে এটি সিস্টেম ইমেজে ইনস্টল না হয়), এবং সরিয়ে ফেলা ক্যাপাবিলিটিগুলোর ওপর নির্ভরশীল বা সেগুলোকে ইমপ্লিমেন্ট করা যেকোনো কোড মুছে ফেলুন।ফ্রেমওয়ার্ক ম্যানিফেস্ট থেকে
Vবা তার চেয়ে কমmax-levelযুক্ত ফ্রেমওয়ার্ক HAL-গুলো অপসারণ করুন, এবং অপসারিত ফ্রেমওয়ার্ক HAL-গুলো বাস্তবায়নকারী যেকোনো কোড মুছে ফেলুন।
রিলিজ কনফিগারেশনের জন্য পর্যায়ক্রমিক অবচয়
ট্রাঙ্ক স্টেবল-এর ব্রাঞ্চিং কৌশল, যেখানে কোয়ার্টারলি প্ল্যাটফর্ম রিলিজ (QPR) আলাদা রিলিজ-ডেভ ব্রাঞ্চের পরিবর্তে সরাসরি git_main থেকে নেওয়া হয়, তার জন্য একটি পর্যায়ক্রমিক ডেপ্রিকেশন প্রক্রিয়ার প্রয়োজন হয়। একটি FCM সংস্করণকে trunk_staging বিল্ড থেকে আগাম সংকেত দেওয়ার জন্য সরিয়ে ফেলা হতে পারে, কিন্তু সারা বছর ধরে QPR গ্রহণকারী ডিভাইসগুলোর সুবিধার জন্য সেটিকে রিলিজ ব্রাঞ্চে সমর্থন দেওয়া অব্যাহত থাকে।
সাধারণত, একটি ফ্রেমওয়ার্ক রিলিজ ছয়টি এফসিএম সমর্থন করে: একটি বর্তমান সংস্করণ, চারটি পূর্ববর্তী সংস্করণ, এবং কিউপিআর (QPR) সমর্থনের জন্য একটি অতিরিক্ত সংস্করণ। এই সংখ্যা বাড়তে পারে যদি নির্দিষ্ট এফসিএম সংস্করণগুলিতে (যেমন অ্যান্ড্রয়েড ১৫-এর 202404 ) ডিভাইসের দীর্ঘস্থায়িত্বের জন্য বর্ধিত সমর্থন থাকে।
কোনো নির্দিষ্ট ফ্রেমওয়ার্ক রিলিজের জন্য যেসব ডিভাইসের টার্গেট এফসিএম ভার্সন এস এফ (S F)- এর বাইরে, সেগুলো সেই রিলিজে আপগ্রেড করা যাবে না।
সম্পূর্ণরূপে বাতিলকৃত HAL-গুলির অপসারণ
যখন কোনো FCM সংস্করণ সরিয়ে ফেলা হয়, তখন কিছু HAL ইন্টারফেস বা সেগুলোর সংস্করণ আর কোনো FCM-এ উপস্থিত থাকে না। এর মানে হলো, অ্যান্ড্রয়েড সেগুলোকে আর মোটেই সমর্থন করে না, এমনকি ডিভাইস আপগ্রেড করার ক্ষেত্রেও।
কোনো HAL-এর সমর্থন বন্ধ হয়ে গেলে, ডেভেলপাররা অ্যান্ড্রয়েড থেকে সেই HAL ইন্টারফেসের রেফারেন্সগুলো সরিয়ে ফেলেন, যার মধ্যে ফ্রেমওয়ার্কের ক্লায়েন্ট কোড, ডিফল্ট ইমপ্লিমেন্টেশন এবং VTS টেস্ট কেস অন্তর্ভুক্ত থাকে।
যদি অপসারণ করা হচ্ছে এমন HAL থেকে উত্তরাধিকারসূত্রে প্রাপ্ত কোনো সমর্থিত HAL না থাকে, তাহলে কয়েকটি অতিরিক্ত ধাপ অনুসরণ করে HAL সংজ্ঞাটিই অপসারণ করা যেতে পারে।
- সোর্স কোড থেকে HAL ইন্টারফেসের সংজ্ঞাটি মুছে ফেলুন। এর মধ্যে
*.aidlফাইল এবংAndroid.bpaidl_interfaceমডিউল অন্তর্ভুক্ত। - HIDL হলে,
hardware/interfaces/current.txtথেকে HASH-টি মুছে ফেলুন। - যদি AIDL হয়, তাহলে ফ্রোজেন AIDL ফাইলগুলো সহ
aidl_apiডিরেক্টরিটি মুছে ফেলুন। -
hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cppথেকে ইন্টারফেসটি সরিয়ে ফেলুন।
HAL সংস্করণের অবস্থা
নিম্নলিখিত বিভাগগুলিতে একটি HAL সংস্করণের সম্ভাব্য অবস্থাগুলি (কালানুক্রমিকভাবে) বর্ণনা করা হয়েছে।
অপ্রকাশিত
ডিভাইস HAL-এর ক্ষেত্রে, যদি কোনো HAL ভার্সন পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সগুলোর কোনোটিতেই না থাকে, তবে সেটিকে অপ্রকাশিত এবং সম্ভবত উন্নয়নাধীন বলে গণ্য করা হয়। এর মধ্যে সেইসব HAL ভার্সনও অন্তর্ভুক্ত, যেগুলো শুধুমাত্র compatibility_matrix.F.xml ফাইলে রয়েছে। উদাহরণ:
- অ্যান্ড্রয়েড ৯-এর বিকাশের সময়
health@2.0HAL-টিকে একটি অপ্রকাশিত HAL হিসেবে বিবেচনা করা হতো এবং এটি শুধুমাত্রcompatibility_matrix.3.xmlফাইলে উপস্থিত ছিল। -
teleportation@1.0HAL-টি কোনো প্রকাশিত কম্প্যাটিবিলিটি ম্যাট্রিক্সে নেই এবং এটিকে একটি অপ্রকাশিত HAL হিসেবেও বিবেচনা করা হয়।
ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, যদি কোনো HAL ভার্সন শুধুমাত্র একটি সম্পর্কহীন ডেভেলপমেন্ট ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে থাকে, তবে সেটিকে অপ্রকাশিত বলে গণ্য করা হয়।
প্রকাশিত এবং বর্তমান
ডিভাইস HAL-এর ক্ষেত্রে, যদি কোনো HAL ভার্সন কোনো পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে থাকে, তবে তা রিলিজ করা হয়। উদাহরণস্বরূপ, FCM ভার্সন 3 ফ্রোজেন এবং AOSP-তে প্রকাশিত হওয়ার পর, health@2.0 HAL-টিকে একটি রিলিজ করা এবং বর্তমান HAL ভার্সন হিসেবে গণ্য করা হয়।
যদি কোনো HAL ভার্সন একটি পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে থাকে, যেখানে সর্বোচ্চ FCM ভার্সনটি রয়েছে, তাহলে সেই HAL ভার্সনটি কারেন্ট (অর্থাৎ ডেপ্রিকেটেড নয়)। উদাহরণস্বরূপ, বিদ্যমান HAL ভার্সনগুলো (যেমন compatibility_matrix.legacy.xml এ প্রবর্তিত nfc@1.0 ) যেগুলো compatibility_matrix.3.xml এও বিদ্যমান থাকে, সেগুলোকেও রিলিজড এবং কারেন্ট HAL ভার্সন হিসেবে গণ্য করা হয়।
ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, যদি কোনো HAL ভার্সন সর্বশেষ প্রকাশিত ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে max-level অ্যাট্রিবিউট ছাড়া থাকে অথবা (অস্বাভাবিকভাবে) সেই ব্রাঞ্চে প্রকাশিত FCM ভার্সনের সমান বা তার চেয়ে বেশি max-level থাকে, তবে সেটিকে একটি প্রকাশিত এবং বর্তমান HAL ভার্সন হিসেবে গণ্য করা হয়। উদাহরণস্বরূপ, displayservice HAL-টি Android 12-এ প্রকাশিত এবং বর্তমান, যেমনটি Android 12 ফ্রেমওয়ার্ক ম্যানিফেস্টে উল্লেখ করা হয়েছে।
প্রকাশিত কিন্তু বাতিল
ডিভাইস HAL-এর ক্ষেত্রে, একটি HAL ভার্সন তখনই অপ্রচলিত বলে গণ্য হবে, যদি নিম্নলিখিত সব শর্ত পূরণ হয়:
- এটি মুক্তি পেয়েছে।
- এটি পাবলিক এবং ফ্রোজেন কম্প্যাটিবিলিটি ম্যাট্রিক্সে নেই, যেটিতে সর্বোচ্চ এফসিএম ভার্সনটি রয়েছে।
- এটি একটি সর্বজনীন এবং অপরিবর্তিত সামঞ্জস্য ম্যাট্রিক্সের মধ্যে রয়েছে, যা ফ্রেমওয়ার্কটি এখনও সমর্থন করে।
উদাহরণ:
-
health@1.0HAL-টিcompatibility_matrix.legacy.xml,compatibility_matrix.1.xml, এবংcompatibility_matrix.2.xmlএ আছে, কিন্তুcompatibility_matrix.3.xmlএ নেই। এই কারণে Android 9-এ এটিকে ডেপ্রিকেটেড (deprecated) হিসেবে গণ্য করা হয়। - অ্যান্ড্রয়েড ৯-এ পাওয়ার এইচএএল-এর একটি ছোটখাটো সংস্করণ আপগ্রেড হয়েছে, কিন্তু
power@1.0এখনওcompatibility_matrix.3.xmlএ রয়েছে। -
power@1.0compatibility_matrix.legacy.xml,compatibility_matrix.1.xml, এবংcompatibility_matrix.2.xml। -
compatibility_matrix.3.xmlpower@1.0-1আছে।
সুতরাং Android 9-এ power@1.0 বর্তমান, কিন্তু অপ্রচলিত নয় ।
ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, যদি সর্বশেষ প্রকাশিত ব্রাঞ্চের ফ্রেমওয়ার্ক ম্যানিফেস্টে কোনো HAL ভার্সনের max-level অ্যাট্রিবিউটটি ঐ ব্রাঞ্চের FCM ভার্সন রিলিজের চেয়ে কম হয়, তবে সেটিকে একটি প্রকাশিত কিন্তু ডেপ্রিকেটেড HAL ভার্সন হিসেবে গণ্য করা হয়। উদাহরণস্বরূপ, Android 12 ফ্রেমওয়ার্ক ম্যানিফেস্ট দ্বারা নির্দিষ্ট করা অনুযায়ী, schedulerservice HAL-টি Android 12-এ প্রকাশিত কিন্তু ডেপ্রিকেটেড।
অপসারণ করা হয়েছে
ডিভাইস HAL-এর ক্ষেত্রে, একটি HAL ভার্সন তখনই মুছে ফেলা হয় যখন নিম্নলিখিত শর্তগুলো পূরণ হয়:
- এটি পূর্বে মুক্তি পেয়েছিল।
- এটি ফ্রেমওয়ার্ক দ্বারা সমর্থিত কোনো সর্বজনীন এবং স্থির সামঞ্জস্য ম্যাট্রিক্সের অন্তর্ভুক্ত নয়।
যেসব কম্প্যাটিবিলিটি ম্যাট্রিক্স পাবলিক ও ফ্রোজেন, কিন্তু ফ্রেমওয়ার্ক দ্বারা সমর্থিত নয়, সেগুলোকে কোডবেসে রাখা হয় অপসারিত HAL ভার্সন সেট নির্ধারণ করার জন্য, যাতে VTS টেস্ট লিখে এটা নিশ্চিত করা যায় যে নতুন ডিভাইসগুলোতে অপসারিত HAL নেই।
ফ্রেমওয়ার্ক HAL-এর ক্ষেত্রে, একটি HAL সংস্করণ তখনই অপসারণ করা হয় যখন নিম্নলিখিত শর্তগুলো পূরণ হয়:
- এটি পূর্বে মুক্তি পেয়েছিল।
- এটি সর্বশেষ প্রকাশিত শাখার কোনো ফ্রেমওয়ার্ক ম্যানিফেস্টে নেই।
লিগ্যাসি এফসিএম
টার্গেট এফসিএম ভার্সন লিগ্যাসি হলো সমস্ত নন-ট্রেবল ডিভাইসের জন্য একটি বিশেষ ভ্যালু। লিগ্যাসি এফসিএম, compatibility_matrix.legacy.xml , লিগ্যাসি ডিভাইসগুলিতে (অর্থাৎ অ্যান্ড্রয়েড ৮.০-এর আগে লঞ্চ হওয়া ডিভাইসগুলিতে) ফ্রেমওয়ার্কের প্রয়োজনীয়তাগুলি তালিকাভুক্ত করে।
যদি সংস্করণ F এর কোনো FCM-এর জন্য এই ফাইলটি বিদ্যমান থাকে, তবে যেকোনো নন-ট্রেবল ডিভাইসকে F এ আপগ্রেড করা যেতে পারে, যদি তার ডিভাইস ম্যানিফেস্ট এই ফাইলের সাথে সামঞ্জস্যপূর্ণ হয়। এটি অপসারণের পদ্ধতি অন্যান্য টার্গেট FCM সংস্করণগুলোর FCM-এর মতোই (সক্রিয় প্রি-8.0 ডিভাইসের সংখ্যা একটি নির্দিষ্ট সীমার নিচে নেমে গেলে এটি অপসারণ করা হয়)।
প্রকাশিত এফসিএম সংস্করণ
প্রকাশিত এফসিএম সংস্করণগুলির তালিকা hardware/interfaces/compatibility_matrices অধীনে পাওয়া যাবে।
কোনো নির্দিষ্ট অ্যান্ড্রয়েড রিলিজের সাথে প্রকাশিত FCM সংস্করণটি খুঁজে পেতে, Level.h দেখুন।