FCM का लाइफ़साइकल

Android फ़्रेमवर्क की रिलीज़ में, कई फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स (एफ़सीएम) होते हैं. हर अपग्रेड किए जा सकने वाले टारगेट एफ़सीएम वर्शन के लिए एक एफ़सीएम होता है. इससे यह तय होता है कि फ़्रेमवर्क किन चीज़ों का इस्तेमाल कर सकता है और टारगेट एफ़सीएम वर्शन की ज़रूरी शर्तें क्या हैं. FCM के लाइफ़साइकल के तहत, Android, HIDL HAL को बंद कर देता है और उन्हें हटा देता है. इसके बाद, FCM फ़ाइलों में बदलाव करके, HAL वर्शन की स्थिति को दिखाता है.

अपने इकोसिस्टम में सिर्फ़ फ़्रेमवर्क वाले ओटीए को चालू करने के लिए, वेंडर इंटरफ़ेस को बढ़ाने वाले पार्टनर को भी एचआईडीएल एचएएल को बंद करना और हटाना चाहिए. इसके लिए, उन्हें वही तरीके इस्तेमाल करने चाहिए.

शब्दावली

फ़्रेमवर्क कंपैटिबिलिटी मैट्रिक्स (एफ़सीएम)
यह एक एक्सएमएल फ़ाइल होती है. इसमें, वेंडर के लागू किए गए फ़्रेमवर्क से जुड़ी ज़रूरी शर्तों के बारे में बताया जाता है. कंपैटबिलिटी मैट्रिक्स का वर्शन होता है. साथ ही, हर फ़्रेमवर्क रिलीज़ के लिए एक नया वर्शन फ़्रीज़ किया जाता है. हर फ़्रेमवर्क रिलीज़ में,
कई FCM शामिल होते हैं.
प्लैटफ़ॉर्म के FCM वर्शन (SF)
फ़्रेमवर्क रिलीज़ में, FCM के सभी वर्शन का सेट. यह फ़्रेमवर्क, किसी भी वेंडर के ऐसे इंप्लीमेंटेशन के साथ काम कर सकता है जो इनमें से किसी एक एफसीएम की ज़रूरी शर्तें पूरी करता हो.
FCM वर्शन (F)
फ़्रेमवर्क रिलीज़ में मौजूद सभी FCM में सबसे नया वर्शन.
टारगेट एफ़सीएम वर्शन (V)
टारगेट किया गया FCM वर्शन (SF से), जिसे डिवाइस के मेनिफ़ेस्ट में साफ़ तौर पर बताया गया है. वेंडर के लागू किए गए FCM वर्शन को इस वर्शन की ज़रूरी शर्तें पूरी करनी होंगी. वेंडर के लागू किए गए किसी भी बदलाव को पब्लिश किए गए FCM के हिसाब से जनरेट किया जाना चाहिए. हालांकि, यह अपने डिवाइस मेनिफ़ेस्ट में HAL के नए वर्शन के बारे में बता सकता है.
एचएएल वर्शन
HAL वर्शन का फ़ॉर्मैट foo@x.y होता है. इसमें foo, HAL का नाम होता है और x.y, खास वर्शन होता है. उदाहरण के लिए, nfc@1.0, keymaster@3.0 (इस पूरे दस्तावेज़ में रूट प्रीफ़िक्स, जैसे कि android.hardware को शामिल नहीं किया गया है.)
डिवाइस मेनिफ़ेस्ट
ऐसी एक्सएमएल फ़ाइलें जिनमें यह जानकारी होती है कि वेंडर इंटरफ़ेस का डिवाइस साइड, एचएएल के कौनसे वर्शन उपलब्ध कराता है. इसमें वेंडर और ओडीएम इमेज शामिल हैं. डिवाइस मेनिफ़ेस्ट का कॉन्टेंट, डिवाइस के टारगेट किए गए एफ़सीएम वर्शन के हिसाब से तय होता है. हालांकि, इसमें ऐसे एचएएल शामिल किए जा सकते हैं जो V से जुड़े एफ़सी की तुलना में नए हों.
डिवाइस HAL
डिवाइस मेनिफ़ेस्ट में दिए गए और फ़्रेमवर्क कंपैटिबिलिटी मैट्रिक्स (एफ़सीएम) में शामिल किए गए एचएएल.
डिवाइस कंपैटिबिलिटी मैट्रिक्स (डीसीएम)
एक एक्सएमएल फ़ाइल, जिसमें फ़्रेमवर्क लागू करने के लिए, वेंडर की ज़रूरी शर्तों के बारे में बताया गया हो. हर डिवाइस में एक DCM होता है.
फ़्रेमवर्क मेनिफ़ेस्ट
यह एक एक्सएमएल फ़ाइल होती है. इसमें यह जानकारी होती है कि वेंडर इंटरफ़ेस का फ़्रेमवर्क साइड, एचएएल के कौनसे वर्शन उपलब्ध कराता है. इसमें सिस्टम, system_ext, और प्रॉडक्ट इमेज शामिल हैं. फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद एचएएल, डिवाइस के टारगेट एफ़सीएम वर्शन के हिसाब से डाइनैमिक तौर पर बंद किए जाते हैं.
फ़्रेमवर्क HAL
ऐसे एचएएल जो फ़्रेमवर्क मेनिफ़ेस्ट में दिए गए हैं और डिवाइस के साथ काम करने वाले सॉफ़्टवेयर की सूची (डीसीएम) में शामिल हैं.

कोडबेस में FCM का लाइफ़साइकल

इस दस्तावेज़ में, FCM के लाइफ़साइकल के बारे में बताया गया है. जिन मेनिफ़ेस्ट का इस्तेमाल किया जा सकता है उन्हें देखने के लिए, hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml पर जाएं. यहां आपको system/libvintf/include/vintf/Level.h में FCM के बारे में जानकारी मिलेगी.

Android के रिलीज़ किए गए वर्शन के साथ शिप किए गए डिवाइस में, FCM की वैल्यू उसी लेवल के बराबर या उससे ज़्यादा होनी चाहिए. उदाहरण के लिए, Android 11 के साथ शिप किए गए डिवाइस में आम तौर पर FCM लेवल 5 होता है. हालांकि, इसमें FCM लेवल 6 या इसके बाद के वर्शन को लागू किया जाता है. इसमें कई अतिरिक्त ज़रूरी शर्तें होती हैं, जिनके बारे में कंपैटिबिलिटी मैट्रिक्स में बताया गया है. Android 15 के लिए, इन लेवल का इस्तेमाल किया जा सकता है:

FCM Android वर्शन
5 Android 11/R
6 Android 12/S
7 Android 13/T
8 Android 14/U
202404 Android 15/V

FCM का लेवल, वेंडर एपीआई लेवल के बराबर या उससे नया हो.

जब Android, FCM के किसी लेवल को बंद कर देता है, तब भी वह मौजूदा डिवाइसों पर काम करता है. FCM के निचले लेवल को टारगेट करने वाले डिवाइसों को, FCM के नए लेवल में शामिल HAL इस्तेमाल करने की अनुमति होती है. हालांकि, इसके लिए ज़रूरी है कि वे 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 जोड़ना

डेवलपमेंट के दौरान, जब Android में मौजूदा FCM वर्शन F पर कोई नया HAL (वाई-फ़ाई, एनएफ़सी वगैरह) जोड़ा जाता है, तब HAL को 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 वर्शन होते हैं.

डेवलपमेंट के दौरान, जब एआईडीएल एचएएल का वर्शन, मौजूदा FCM वर्शन F पर 2 से 3 में अपग्रेड होता है, तब नया वर्शन, compatibility_matrix.F.xml में एचएएल एंट्री में जोड़ दिया जाता है. एचएएल एंट्री के वर्शन फ़ील्ड में, 2-3 जैसी रेंज स्वीकार की जाती हैं.

उदाहरण के लिए, Android FCM ने HAL के माइनर वर्शन के अपग्रेड के तौर पर F पेश किया 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 रिलीज़ का हिस्सा होती है. इसमें ये चरण शामिल होते हैं:

  1. पक्का करें कि compatibility_matrix.F.xml में level="F" एट्रिब्यूट मौजूद हो.
  2. पक्का करें कि सभी डिवाइसों को बनाया और बूट किया गया हो.
  3. वीटीएस टेस्ट अपडेट करें, ताकि यह पक्का किया जा सके कि शिपिंग एपीआई लेवल पर आधारित नए फ़्रेमवर्क के साथ लॉन्च होने वाले डिवाइसों में, टारगेट FCM वर्शन V >= F हो.
  4. फ़ाइल को 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 वर्शन V के ऐक्टिव डिवाइसों की संख्या, तय सीमा से कम हो जाती है, तो टारगेट FCM वर्शन को फ़्रेमवर्क की अगली रिलीज़ के SF सेट से हटा दिया जाता है. इसके लिए, नीचे दिए गए दोनों चरण पूरे करें:

  1. बिल्ड के नियमों से compatibility_matrix.V.xml को हटाना, ताकि इसे सिस्टम इमेज पर इंस्टॉल न किया जा सके. साथ ही, हटाए गए फ़ीचर को लागू करने या उन पर निर्भर रहने वाले किसी भी कोड को मिटाना.

  2. फ़्रेमवर्क मेनिफ़ेस्ट से, max-level से कम या इसके बराबर V वाले फ़्रेमवर्क एचएएल हटाना. साथ ही, हटाए गए फ़्रेमवर्क एचएएल को लागू करने वाले किसी भी कोड को मिटाना.

अगर किसी डिवाइस का टारगेट FCM वर्शन, फ़्रेमवर्क की किसी रिलीज़ के लिए SF से बाहर है, तो उसे उस रिलीज़ पर अपग्रेड नहीं किया जा सकता.

पूरी तरह से काम न करने वाले HAL हटाए गए

जब किसी FCM वर्शन को हटा दिया जाता है, तो कुछ एचएएल इंटरफ़ेस या एचएएल इंटरफ़ेस के वर्शन, किसी भी FCM में मौजूद नहीं होते हैं. इसका मतलब है कि Android अब इनका इस्तेमाल नहीं करता. यहां तक कि डिवाइसों को अपग्रेड करने के लिए भी इनका इस्तेमाल नहीं किया जाता.

जब किसी एचएएल के लिए सहायता बंद कर दी जाती है, तो डेवलपर Android से उस एचएएल इंटरफ़ेस के रेफ़रंस हटा देते हैं. इनमें फ़्रेमवर्क में मौजूद क्लाइंट कोड, डिफ़ॉल्ट तौर पर लागू होने वाला कोड, और वीटीएस टेस्ट केस शामिल हैं.

अगर हटाए जा रहे HAL से इनहेरिट करने वाले कोई HAL मौजूद नहीं हैं, तो कुछ अतिरिक्त चरणों के साथ HAL की परिभाषा को हटाया जा सकता है.

  1. सोर्स कोड से एचएएल इंटरफ़ेस डेफ़िनिशन हटाएं. इसमें *.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 वर्शन शामिल हैं जो सिर्फ़ compatibility_matrix.F.xml में मौजूद हैं. उदाहरण:

  • Android 9 को डेवलप करते समय, health@2.0 HAL को रिलीज़ नहीं किया गया था. यह सिर्फ़ compatibility_matrix.3.xml में मौजूद था.
  • teleportation@1.0 एचएएल, रिलीज़ की गई किसी भी कंपैटिबिलिटी मैट्रिक्स में शामिल नहीं है. साथ ही, इसे रिलीज़ नहीं किया गया एचएएल भी माना जाता है.

फ़्रेमवर्क एचएएल के लिए, अगर कोई एचएएल वर्शन किसी ऐसी डेवलपमेंट ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद है जिससे उसका कोई लेना-देना नहीं है, तो उसे रिलीज़ नहीं किया गया माना जाता है.

रिलीज़ किया गया और मौजूदा

डिवाइस एचएएल के लिए, अगर कोई एचएएल वर्शन किसी सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में है, तो उसे रिलीज़ कर दिया जाता है. उदाहरण के लिए, FCM वर्शन 3 के फ़्रीज़ होने और AOSP पर पब्लिश होने के बाद, health@2.0 HAL को रिलीज़ किया गया और मौजूदा HAL वर्शन माना जाता है.

अगर HAL का कोई वर्शन, सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में मौजूद है और उसमें सबसे नया FCM वर्शन है, तो इसका मतलब है कि HAL का वर्शन मौजूदा है (यानी कि पुराना नहीं है). उदाहरण के लिए, एचएएल के मौजूदा वर्शन (जैसे कि nfc@1.0, जिसे compatibility_matrix.legacy.xml में पेश किया गया था) जो compatibility_matrix.3.xml में भी मौजूद हैं उन्हें भी रिलीज़ किए गए और एचएएल के मौजूदा वर्शन माना जाता है.

फ़्रेमवर्क HAL के लिए, अगर HAL का कोई वर्शन, max-level एट्रिब्यूट के बिना या (आम तौर पर) इस ब्रांच में रिलीज़ किए गए FCM वर्शन के बराबर या उससे ज़्यादा max-level के साथ, रिलीज़ की गई सबसे नई ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में है, तो उसे रिलीज़ किया गया और मौजूदा HAL वर्शन माना जाता है. उदाहरण के लिए, Android 12 फ़्रेमवर्क मेनिफ़ेस्ट में बताए गए अनुसार, displayservice एचएएल को Android 12 में रिलीज़ किया गया है और यह मौजूदा वर्शन है.

रिलीज़ की गई, लेकिन अब इस्तेमाल नहीं की जाती

डिवाइस एचएएल के लिए, एचएएल वर्शन को सिर्फ़ तब बंद किया जाता है, जब ये सभी शर्तें पूरी होती हैं:

  • इसे रिलीज़ कर दिया गया है.
  • यह सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में नहीं है. इसमें सबसे नया FCM वर्शन है.
  • यह एक सार्वजनिक और फ़्रीज़ की गई कंपैटबिलिटी मैट्रिक्स में है. फ़िलहाल, फ़्रेमवर्क इसका इस्तेमाल कर सकता है.

उदाहरण:

इसलिए, Android 9 में power@1.0 का इस्तेमाल किया जा सकता है, लेकिन इसे बंद नहीं किया गया है.

फ़्रेमवर्क HAL के लिए, अगर HAL का कोई वर्शन, रिलीज़ की गई सबसे नई ब्रांच के फ़्रेमवर्क मेनिफ़ेस्ट में मौजूद है और उसका max-level एट्रिब्यूट, इस ब्रांच में रिलीज़ किए गए FCM वर्शन से कम है, तो उसे रिलीज़ किया गया, लेकिन पुराना HAL वर्शन माना जाता है. उदाहरण के लिए, schedulerservice एचएएल को रिलीज़ किया गया है, लेकिन Android 12 में इसे बंद कर दिया गया है. इसकी जानकारी Android 12 फ़्रेमवर्क मेनिफ़ेस्ट में दी गई है.

हटाया गया

डिवाइस एचएएल के लिए, एचएएल वर्शन को तब हटाया जाता है, जब ये शर्तें पूरी होती हैं:

  • इसे पहले रिलीज़ किया गया था.
  • यह किसी भी सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में नहीं है.

सार्वजनिक तौर पर उपलब्ध, फ़्रीज़ की गई, लेकिन फ़्रेमवर्क के साथ काम न करने वाली कंपैटिबिलिटी मैट्रिक्स को कोडबेस में रखा जाता है. ऐसा इसलिए किया जाता है, ताकि हटाए गए HAL वर्शन के सेट को तय किया जा सके. इससे VTS टेस्ट लिखे जा सकते हैं, ताकि यह पक्का किया जा सके कि नए डिवाइसों पर हटाए गए HAL मौजूद न हों.

फ़्रेमवर्क एचएएल के लिए, एचएएल का वर्शन तब ही हटाया जाता है, जब ये शर्तें पूरी होती हैं:

  • इसे पहले रिलीज़ किया गया था.
  • यह रिलीज़ की गई नई ब्रांच के किसी भी फ़्रेमवर्क मेनिफ़ेस्ट में नहीं है.

लेगसी FCM

टारगेट एफ़सीएम वर्शन लेगसी, 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 पर जाएं.