Android फ़्रेमवर्क की रिलीज़ में, कई फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स (एफ़सीएम) होते हैं. हर अपग्रेड किए जा सकने वाले टारगेट एफ़सीएम वर्शन के लिए एक एफ़सीएम होता है. इससे यह तय होता है कि फ़्रेमवर्क किन चीज़ों का इस्तेमाल कर सकता है और टारगेट एफ़सीएम वर्शन की ज़रूरी शर्तें क्या हैं. FCM के लाइफ़साइकल के तहत, Android, HIDL HAL को बंद कर देता है और हटा देता है. इसके बाद, FCM फ़ाइलों में बदलाव करके, HAL वर्शन की स्थिति दिखाता है.
अपने इकोसिस्टम में सिर्फ़ फ़्रेमवर्क वाले ओटीए को चालू करने के लिए, वेंडर इंटरफ़ेस को बढ़ाने वाले पार्टनर को भी एचआईडीएल एचएएल को बंद करना और हटाना चाहिए. इसके लिए, उन्हें वही तरीके इस्तेमाल करने चाहिए.
शब्दावली
- फ़्रेमवर्क के साथ काम करने की सुविधा की जानकारी देने वाली मैट्रिक्स (एफ़सीएम)
- यह एक एक्सएमएल फ़ाइल होती है. इसमें, वेंडर के लागू किए गए फ़्रेमवर्क की ज़रूरी शर्तों के बारे में बताया जाता है. कंपैटबिलिटी मैट्रिक्स का वर्शन होता है. साथ ही, हर फ़्रेमवर्क रिलीज़ के लिए एक नया वर्शन फ़्रीज़ किया जाता है. हर फ़्रेमवर्क रिलीज़ में, कई FCM शामिल होते हैं.
- प्लैटफ़ॉर्म के FCM वर्शन (SF)
- फ़्रेमवर्क की रिलीज़ में, FCM के सभी वर्शन का सेट. यह फ़्रेमवर्क, किसी भी वेंडर के ऐसे इंटिग्रेशन के साथ काम कर सकता है जो इनमें से किसी एक एफसीएम की ज़रूरी शर्तें पूरी करता हो.
- FCM वर्शन (F)
- फ़्रेमवर्क की रिलीज़ में मौजूद सभी FCM में सबसे नया वर्शन.
- टारगेट एफ़सीएम वर्शन (V)
- टारगेट किया गया FCM वर्शन (SF से), जिसे डिवाइस के मेनिफ़ेस्ट में साफ़ तौर पर बताया गया है. साथ ही, जिसे वेंडर के लागू किए गए वर्शन से पूरा किया जाता है. वेंडर के लागू किए गए किसी भी बदलाव को पब्लिश किए गए FCM के हिसाब से जनरेट किया जाना चाहिए. हालांकि, यह अपने डिवाइस मेनिफ़ेस्ट में HAL के नए वर्शन के बारे में बता सकता है.
- एचएएल वर्शन
- HAL वर्शन का फ़ॉर्मैट
foo@x.yहोता है. इसमेंfoo, HAL का नाम होता है औरx.y, खास वर्शन होता है. उदाहरण के लिए,nfc@1.0,keymaster@3.0(इस पूरे दस्तावेज़ में रूट प्रीफ़िक्स, जैसे किandroid.hardwareको शामिल नहीं किया गया है.) - डिवाइस मेनिफ़ेस्ट
- ऐसी एक्सएमएल फ़ाइलें जो यह तय करती हैं कि वेंडर इंटरफ़ेस का डिवाइस साइड, एचएएल के कौनसे वर्शन उपलब्ध कराता है. इनमें वेंडर और ओडीएम इमेज शामिल हैं. डिवाइस मेनिफ़ेस्ट का कॉन्टेंट, डिवाइस के टारगेट किए गए एफ़सीएम वर्शन के हिसाब से तय होता है. हालांकि, इसमें ऐसे एचएएल शामिल किए जा सकते हैं जो V से जुड़े एफ़सी की तुलना में नए हों.
- डिवाइस HAL
- डिवाइस मेनिफ़ेस्ट में दिए गए और फ़्रेमवर्क कंपैटिबिलिटी मैट्रिक्स (एफ़सीएम) में शामिल किए गए एचएएल.
- डिवाइस कंपैटबिलिटी मैट्रिक्स (डीसीएम)
- एक एक्सएमएल फ़ाइल, जिसमें फ़्रेमवर्क लागू करने के लिए वेंडर की ज़रूरी शर्तों के बारे में बताया गया हो. हर डिवाइस में एक डीसीएम होता है.
- फ़्रेमवर्क मेनिफ़ेस्ट
- यह एक एक्सएमएल फ़ाइल होती है. इसमें यह जानकारी होती है कि वेंडर इंटरफ़ेस का फ़्रेमवर्क साइड, एचएएल के कौनसे वर्शन उपलब्ध कराता है. इसमें सिस्टम, system_ext, और प्रॉडक्ट इमेज शामिल हैं. फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद HAL, डिवाइस के टारगेट एफ़सीएम वर्शन के हिसाब से डाइनैमिक तरीके से बंद किए जाते हैं.
- फ़्रेमवर्क HAL
- ऐसे एचएएल जो फ़्रेमवर्क मेनिफ़ेस्ट में दिए गए हैं और डिवाइस कंपैटिबिलिटी मैट्रिक्स (डीसीएम) में शामिल हैं.
कोडबेस में FCM का लाइफ़साइकल
इस दस्तावेज़ में, FCM के लाइफ़साइकल के बारे में बताया गया है. जिन मेनिफ़ेस्ट का इस्तेमाल किया जा सकता है उन्हें देखने के लिए, hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml पर जाएं. यहां आपको system/libvintf/include/vintf/Level.h में FCM के बारे में जानकारी मिलेगी.
Android के रिलीज़ किए गए वर्शन के साथ शिप किए गए डिवाइस में, FCM की वैल्यू उसी लेवल के बराबर या उससे ज़्यादा होनी चाहिए. उदाहरण के लिए, Android 12 के साथ शिप किए गए डिवाइस में आम तौर पर FCM लेवल 6 होता है. हालांकि, इसमें FCM लेवल 7 या इससे ज़्यादा का लेवल लागू किया जा सकता है. इससे Android के व्यवहार में बदलाव होता है और वेंडर के नए एपीआई को इस्तेमाल करने के लिए मजबूर किया जाता है. ऐसा कंपैटिबिलिटी मैट्रिक्स में बताए गए तरीके से किया जाता है. Android 16 के लिए, ये लेवल इस्तेमाल किए जा सकते हैं:
| FCM | Android वर्शन |
|---|---|
| 6 | Android 12/S |
| 7 | Android 13/T |
| 8 | Android 14/U |
| 202404 | Android 15/V |
| 202504 | Android 16/B |
FCM लेवल, वेंडर एपीआई लेवल के बराबर या उससे नया होना चाहिए.
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 में डेवलपमेंट शुरू करने के लिए:
compatibility_matrix.<F-1>.xmlमें मौजूद सबसे नए वर्शन कोcompatibility_matrix.F.xmlमें कॉपी करें.- फ़ाइल में मौजूद
levelएट्रिब्यूट की वैल्यू कोFपर सेट करें. - इस कंपैटिबिलिटी मैट्रिक्स को डिवाइस पर इंस्टॉल करने के लिए, इससे जुड़े बिल्ड के नियम जोड़ें.
नया HAL जोड़ना
डेवलपमेंट के दौरान, जब Android के मौजूदा FCM वर्शन F में कोई नया एचएएल (वाई-फ़ाई, एनएफ़सी वगैरह) जोड़ा जाता है, तब एचएएल को compatibility_matrix.F.xml में जोड़ें.
उदाहरण के लिए, Android 8.1 में cas@1.0 की सुविधा जोड़ी गई थी. Android 8.1 के साथ लॉन्च होने वाले डिवाइस, इस एचएएल को लागू कर सकते हैं. इसलिए, compatibility_matrix.F.xml में यह एंट्री जोड़ी गई थी. 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>
एचएएल (माइनर) को अपग्रेड करना
एआईडीएल एचएएल वर्शन को माइनर एचएएल वर्शन माना जाता है. एचआईडीएल इंटरफ़ेस के वर्शन में major.minor वर्शन होते हैं, जैसे कि 1.2.
डेवलपमेंट के दौरान, जब एआईडीएल एचएएल का वर्शन, मौजूदा एफसीएम वर्शन F पर 2 से 3 में अपग्रेड होता है, तब नया वर्शन, compatibility_matrix.F.xml में एचएएल एंट्री में जोड़ दिया जाता है. एचएएल एंट्री के वर्शन फ़ील्ड में, 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 का मुख्य वर्शन, मौजूदा 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 एचएएल,
compatibility_matrix.F.xmlमें नहीं है. इसलिए, जिन डिवाइसों के लिए FCM काFवर्शन इस्तेमाल किया जाता है उन्हें 1.0 एचएएल उपलब्ध नहीं कराना चाहिए. ऐसा इसलिए, क्योंकि इस एचएएल को अब इस्तेमाल नहीं किया जा सकता. - 1.0 HAL, FCM के पुराने वर्शन में मौजूद होता है. इसलिए, फ़्रेमवर्क अब भी 1.0 HAL के साथ काम कर सकता है. इससे यह पुराने डिवाइसों के साथ काम कर पाता है. ये डिवाइस, FCM के पुराने वर्शन को टारगेट करते हैं.
FCM के नए वर्शन
सिस्टम पार्टीशन पर FCM वर्शन को रिलीज़ करने की प्रोसेस सिर्फ़ Google करता है. यह प्रोसेस, AOSP रिलीज़ का हिस्सा होती है. इसमें ये चरण शामिल होते हैं:
- पक्का करें कि
compatibility_matrix.F.xmlमेंlevel="F"एट्रिब्यूट मौजूद हो. - पक्का करें कि सभी डिवाइसों को बनाया और बूट किया गया हो.
- वीटीएस टेस्ट अपडेट करें, ताकि यह पक्का किया जा सके कि शिपिंग एपीआई लेवल पर आधारित नए फ़्रेमवर्क के साथ लॉन्च होने वाले डिवाइसों में, टारगेट FCM वर्शन
V >= Fहो. - फ़ाइल को AOSP पर पब्लिश करें.
उदाहरण के लिए, वीटीएस टेस्ट से यह पक्का किया जाता है कि Android 9 के साथ लॉन्च होने वाले डिवाइसों में टारगेट एफ़सीएम वर्शन >= 3 हो.
इसके अलावा, प्रॉडक्ट और system_ext FCM, हर प्लैटफ़ॉर्म के FCM वर्शन के लिए ज़रूरी शर्तें भी दिखा सकते हैं. प्रॉडक्ट और system_ext पार्टिशन पर FCM के वर्शन रिलीज़ करने का काम, इन इमेज के मालिक करते हैं. प्रॉडक्ट और system_ext पार्टिशन पर मौजूद FCM के वर्शन नंबर, सिस्टम पार्टिशन पर मौजूद FCM के वर्शन नंबर से मेल खाने चाहिए. सिस्टम पार्टिशन पर मौजूद FCM वर्शन की तरह ही, प्रॉडक्ट और system_ext पार्टिशन में FCM वर्शन F के लिए उपलब्ध कंपैटिबिलिटी मैट्रिक्स में, टारगेट FCM वर्शन F वाले डिवाइस के लिए ज़रूरी शर्तें दिखती हैं.
एचएएल का वर्शन पुराना है
किसी एचएएल वर्शन को बंद करने का फ़ैसला डेवलपर लेता है. जैसे, AOSP एचएएल के लिए, Google यह फ़ैसला लेता है. ऐसा तब हो सकता है, जब HAL का नया वर्शन (माइनर या मेजर) रिलीज़ किया गया हो.
किसी डिवाइस HAL को बंद करना
जब किसी डिवाइस HAL foo@x.y को FCM वर्शन F पर बंद कर दिया जाता है, तो इसका मतलब है कि टारगेट FCM वर्शन V = F या इसके बाद के वर्शन के साथ लॉन्च होने वाले किसी भी डिवाइस को, x.y वर्शन या x.y से पुराने किसी भी वर्शन पर foo को लागू नहीं करना चाहिए. डिवाइसों को अपग्रेड करने के लिए, फ़्रेमवर्क अब भी HAL के पुराने वर्शन का इस्तेमाल कर सकता है.
जब FCM का वर्शन F रिलीज़ होता है, तब HAL का वर्शन foo@x.y पुराना माना जाता है. ऐसा तब होता है, जब टारगेट किए गए FCM के वर्शन V = F के लिए, HAL के किसी खास वर्शन के बारे में साफ़ तौर पर नहीं बताया गया हो. V = F के साथ लॉन्च होने वाले डिवाइसों के लिए, इनमें से कोई एक शर्त पूरी होनी चाहिए:
- फ़्रेमवर्क के लिए, ज़्यादा नया वर्शन (मेजर या माइनर) ज़रूरी है;
- अब फ़्रेमवर्क को एचएएल की ज़रूरत नहीं है.
उदाहरण के लिए, 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 foo@x.y को FCM वर्शन F पर बंद कर दिया जाता है, तो इसका मतलब है कि टारगेट FCM वर्शन V = F या इसके बाद के वर्शन के साथ लॉन्च होने वाले किसी भी डिवाइस को, फ़्रेमवर्क से foo को वर्शन x.y या x.y से पुराने किसी भी वर्शन पर उपलब्ध कराने की उम्मीद नहीं करनी चाहिए. डिवाइसों को अपग्रेड करने के लिए, फ़्रेमवर्क अब भी एचएएल का पुराना वर्शन उपलब्ध कराता है.
जब FCM का वर्शन F रिलीज़ होता है, तब HAL का वर्शन foo@x.y पुराना माना जाता है. ऐसा तब होता है, जब फ़्रेमवर्क मेनिफ़ेस्ट में foo@x.y के लिए max-level="F - 1" तय किया गया हो. V = F के साथ लॉन्च होने वाले डिवाइसों के लिए, फ़्रेमवर्क एचएएल foo@x.y उपलब्ध नहीं कराता है. V = F के साथ लॉन्च होने वाले डिवाइसों पर, डिवाइस के साथ काम करने वाले सॉफ़्टवेयर की सूची में, max-level < V वाले फ़्रेमवर्क एचएएल शामिल नहीं होने चाहिए.
उदाहरण के लिए, Android 12 में schedulerservice@1.0 को बंद कर दिया गया है. इसके max-level एट्रिब्यूट को 5 पर सेट किया गया है. यह FCM का वह वर्शन है जिसे Android 11 में लॉन्च किया गया था. Android 12 फ़्रेमवर्क मेनिफ़ेस्ट देखें.
FCM के टारगेट वर्शन के लिए सहायता बंद करना
हम शेड्यूल के हिसाब से प्रोसेस का इस्तेमाल करते हैं, ताकि टारगेट किए गए FCM वर्शन को हटाया जा सके. ऐसा इसलिए किया जाता है, ताकि ज़रूरी समय तक कंपैटिबिलिटी बनी रहे और लंबे समय तक चलने वाले डिवाइसों के लिए, पार्टनर की ज़रूरी शर्तों को पूरा किया जा सके.
जब हम अगली फ़्रेमवर्क रिलीज़ के SF सेट से किसी टारगेट FCM वर्शन को हटाते हैं, तो हम ये दोनों चरण पूरे करते हैं:
बिल्ड के नियमों से
compatibility_matrix.V.xmlको हटाना, ताकि इसे सिस्टम इमेज पर इंस्टॉल न किया जा सके. साथ ही, उन सभी कोड को मिटाना जो हटाई गई सुविधाओं को लागू करते थे या उन पर निर्भर थे.फ़्रेमवर्क मेनिफ़ेस्ट से,
max-levelसे कम या उसके बराबरVवाले फ़्रेमवर्क एचएएल हटाएं. साथ ही, हटाए गए फ़्रेमवर्क एचएएल को लागू करने वाले कोड को मिटाएं.
रिलीज़ कॉन्फ़िगरेशन के लिए, चरण दर चरण बंद होने की सुविधा
ट्रंक स्टेबल की ब्रांचिंग की रणनीति के तहत, क्वार्टरली प्लैटफ़ॉर्म रिलीज़ (क्यूपीआर) को अलग-अलग रिलीज़-डेवलपमेंट ब्रांच के बजाय सीधे git_main से लिया जाता है. इसके लिए, चरणबद्ध तरीके से बंद करने की प्रक्रिया ज़रूरी है. FCM के किसी वर्शन को trunk_staging के शुरुआती सिग्नल के लिए हटाया जा सकता है. हालांकि, यह रिलीज़ ब्रांच में काम करता रहेगा, ताकि साल भर QPR लेने वाले डिवाइसों को इस्तेमाल किया जा सके.
आम तौर पर, फ़्रेमवर्क के किसी रिलीज़ किए गए वर्शन में छह FCM काम करते हैं: एक मौजूदा वर्शन, चार पिछले वर्शन, और एक अतिरिक्त वर्शन, जो QPR के साथ काम करता है. अगर FCM के कुछ वर्शन (जैसे कि Android 15 का 202404) में डिवाइस के लंबे समय तक काम करने की सुविधा के लिए ज़्यादा समय तक सहायता मिलती है, तो यह संख्या बढ़ सकती है.
अगर किसी डिवाइस का टारगेट FCM वर्शन, फ़्रेमवर्क की किसी रिलीज़ के लिए SF से बाहर है, तो उसे उस रिलीज़ पर अपग्रेड नहीं किया जा सकता.
पूरी तरह से काम न करने वाले HAL हटा दिए गए हैं
जब किसी FCM वर्शन को हटा दिया जाता है, तो कुछ एचएएल इंटरफ़ेस या एचएएल इंटरफ़ेस के वर्शन, किसी भी FCM में मौजूद नहीं होते हैं. इसका मतलब है कि Android अब इनका इस्तेमाल नहीं करता. यहां तक कि डिवाइसों को अपग्रेड करने के लिए भी इनका इस्तेमाल नहीं किया जाता.
जब किसी एचएएल के लिए सहायता बंद कर दी जाती है, तो डेवलपर उस एचएएल इंटरफ़ेस के रेफ़रंस को Android से हटा देते हैं. इनमें फ़्रेमवर्क में मौजूद क्लाइंट कोड, डिफ़ॉल्ट तौर पर लागू होने वाला कोड, और वीटीएस टेस्ट केस शामिल हैं.
अगर हटाए जा रहे 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से इंटरफ़ेस हटाएं.
एचएएल वर्शन का स्टेटस
यहां दिए गए सेक्शन में, एचएएल वर्शन की संभावित स्थितियों के बारे में बताया गया है. ये स्थितियां, समय के हिसाब से क्रम में दी गई हैं.
अप्रकाशित
डिवाइस एचएएल के लिए, अगर कोई एचएएल वर्शन, सार्वजनिक और फ़्रीज़ की गई किसी भी कंपैटिबिलिटी मैट्रिक्स में नहीं है, तो उसे रिलीज़ नहीं किया गया माना जाता है. ऐसा हो सकता है कि वह वर्शन अभी डेवलपमेंट के चरण में हो.
इसमें ऐसे एचएएल वर्शन शामिल हैं जो सिर्फ़ compatibility_matrix.F.xml में हैं.
उदाहरण:
- Android 9 को डेवलप करते समय,
health@2.0HAL को एक ऐसा HAL माना गया था जिसे रिलीज़ नहीं किया गया था. यह सिर्फ़compatibility_matrix.3.xmlमें मौजूद था. teleportation@1.0एचएएल, रिलीज़ की गई किसी भी कंपैटिबिलिटी मैट्रिक्स में नहीं है. साथ ही, इसे रिलीज़ नहीं किया गया एचएएल भी माना जाता है.
फ़्रेमवर्क एचएएल के लिए, अगर कोई एचएएल वर्शन किसी ऐसी डेवलपमेंट ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद है जिससे उसका कोई लेना-देना नहीं है, तो उसे रिलीज़ नहीं किया गया माना जाता है.
रिलीज़ किया गया और मौजूदा
डिवाइस एचएएल के लिए, अगर कोई एचएएल वर्शन किसी सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में है, तो उसे रिलीज़ कर दिया जाता है. उदाहरण के लिए, FCM वर्शन 3 के फ़्रीज़ होने और AOSP पर पब्लिश होने के बाद, health@2.0 HAL को रिलीज़ किया गया और मौजूदा HAL वर्शन माना जाता है.
अगर कोई एचएएल वर्शन, सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में है और उसमें सबसे नया एफ़सीएम वर्शन है, तो एचएएल वर्शन मौजूदा है. इसका मतलब है कि यह पुराना नहीं है. उदाहरण के लिए, मौजूदा एचएएल वर्शन (जैसे कि compatibility_matrix.legacy.xml में पेश किया गया nfc@1.0) जो compatibility_matrix.3.xml में भी मौजूद हैं उन्हें भी रिलीज़ किए गए और मौजूदा एचएएल वर्शन माना जाता है.
फ़्रेमवर्क HAL के लिए, अगर HAL का कोई वर्शन, रिलीज़ की गई सबसे नई ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में max-level एट्रिब्यूट के बिना मौजूद है या (आम तौर पर) इस ब्रांच में रिलीज़ किए गए FCM वर्शन के बराबर या उससे ज़्यादा max-level एट्रिब्यूट के साथ मौजूद है, तो उसे रिलीज़ किया गया और मौजूदा HAL वर्शन माना जाता है. उदाहरण के लिए, Android 12 फ़्रेमवर्क मेनिफ़ेस्ट में बताए गए अनुसार, displayservice एचएएल को Android 12 में रिलीज़ किया गया है और यह मौजूदा वर्शन है.
रिलीज़ किया गया, लेकिन अब इस्तेमाल नहीं किया जा सकता
डिवाइस एचएएल के लिए, एचएएल वर्शन को सिर्फ़ तब बंद किया जाता है, जब ये सभी शर्तें पूरी होती हैं:
- यह रिलीज़ हो गया है.
- यह सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में नहीं है, जिसमें सबसे नया FCM वर्शन है.
- यह एक सार्वजनिक और फ़्रीज़ की गई कंपैटबिलिटी मैट्रिक्स में है. फ़्रेमवर्क अब भी इसका इस्तेमाल करता है.
उदाहरण:
health@1.0एचएएल,compatibility_matrix.legacy.xml,compatibility_matrix.1.xml, औरcompatibility_matrix.2.xmlमें है, लेकिनcompatibility_matrix.3.xmlमें नहीं है. इसलिए, Android 9 में इसे बंद कर दिया गया है.- Android 9 में पावर एचएएल का माइनर वर्शन अपग्रेड किया गया है, लेकिन
power@1.0अब भीcompatibility_matrix.3.xmlमें है. power@1.0compatibility_matrix.legacy.xml,compatibility_matrix.1.xml, औरcompatibility_matrix.2.xml.compatibility_matrix.3.xmlमेंpower@1.0-1हैं.
इसलिए, Android 9 में power@1.0 का इस्तेमाल किया जा सकता है, लेकिन इसे बंद नहीं किया गया है.
फ़्रेमवर्क HAL के लिए, अगर HAL का कोई वर्शन, रिलीज़ की गई सबसे नई ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद है और उसका max-level एट्रिब्यूट, इस ब्रांच में रिलीज़ किए गए FCM वर्शन से कम है, तो उसे रिलीज़ किया गया, लेकिन पुराना HAL वर्शन माना जाता है. उदाहरण के लिए, schedulerservice एचएएल को Android 12 में रिलीज़ किया गया था, लेकिन इसे बंद कर दिया गया है. इसकी जानकारी Android 12 फ़्रेमवर्क मेनिफ़ेस्ट में दी गई है.
हटाया गया
डिवाइस एचएएल के लिए, एचएएल वर्शन को तब हटाया जाता है, जब ये शर्तें पूरी होती हैं:
- इसे पहले रिलीज़ किया गया था.
- यह किसी भी सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में नहीं है.
सार्वजनिक तौर पर उपलब्ध, फ़्रीज़ की गई, लेकिन फ़्रेमवर्क के साथ काम न करने वाली कंपैटिबिलिटी मैट्रिक्स को कोडबेस में रखा जाता है. इससे हटाए गए HAL वर्शन के सेट को तय किया जा सकता है. ऐसा इसलिए किया जाता है, ताकि VTS टेस्ट लिखे जा सकें. इससे यह पक्का किया जा सकता है कि हटाए गए HAL, नए डिवाइसों पर मौजूद न हों.
फ़्रेमवर्क एचएएल के लिए, एचएएल का वर्शन तब ही हटाया जाता है, जब ये शर्तें पूरी होती हैं:
- इसे पहले रिलीज़ किया गया था.
- यह रिलीज़ की गई नई ब्रांच के किसी भी फ़्रेमवर्क मेनिफ़ेस्ट में नहीं है.
लेगसी FCM
Target FCM Version legacy, उन सभी डिवाइसों के लिए एक खास वैल्यू है जिनमें Treble की सुविधा नहीं है. लेगसी FCM, compatibility_matrix.legacy.xml, लेगसी डिवाइसों (यानी कि Android 8.0 से पहले लॉन्च किए गए डिवाइसों) पर फ़्रेमवर्क की ज़रूरी शर्तों की सूची दिखाता है.
अगर यह फ़ाइल, F वर्शन वाले FCM के लिए मौजूद है, तो किसी भी नॉन-ट्रेबल डिवाइस को F पर अपग्रेड किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि डिवाइस का मेनिफ़ेस्ट इस फ़ाइल के साथ काम करता हो. इसे हटाने की प्रोसेस, Target FCM के अन्य वर्शन के लिए इस्तेमाल की जाने वाली प्रोसेस जैसी ही है. इसे तब हटाया जाता है, जब Android 8.0 से पहले के वर्शन वाले डिवाइसों की संख्या एक तय सीमा से कम हो जाती है.
FCM के रिलीज़ किए गए वर्शन
FCM के रिलीज़ किए गए वर्शन की सूची hardware/interfaces/compatibility_matrices में देखी जा सकती है.
Android के किसी वर्शन के साथ रिलीज़ किए गए FCM वर्शन के बारे में जानने के लिए, Level.h देखें.