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

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

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

शब्दावली

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

Android, फ़्रेमवर्क के हर रिलीज़ के लिए FCM वर्शन को बढ़ाता है. जैसे, Android 8 और 8.1. डेवलपमेंट के दौरान, नया 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 में नया एचएएल (वाई-फ़ाई, एनएफ़सी वगैरह) जोड़ते समय, एचएएल को 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 में एचएएल एंट्री में जोड़ दिया जाता है. किसी HAL एंट्री के वर्शन फ़ील्ड में, 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 HAL, compatibility_matrix.F.xml में नहीं है. इसलिए, FCM के F वर्शन का इस्तेमाल करने वाले डिवाइसों को 1.0 HAL उपलब्ध नहीं कराना चाहिए. ऐसा इसलिए, क्योंकि इस HAL को अब इस्तेमाल नहीं किया जा सकता.
  • 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 या इसके बाद के वर्शन के साथ लॉन्च होने वाले किसी भी डिवाइस को, फ़्रेमवर्क से x.y वर्शन पर foo मिलने की उम्मीद नहीं करनी चाहिए. साथ ही, x.y से पुराने किसी भी वर्शन पर foo मिलने की उम्मीद नहीं करनी चाहिए. डिवाइसों को अपग्रेड करने के लिए, फ़्रेमवर्क अब भी एचएएल का पुराना वर्शन उपलब्ध कराता है.

जब FCM का वर्शन F रिलीज़ किया जाता है, तो HAL वर्शन foo@x.y को पुराना माना जाता है. ऐसा तब होता है, जब फ़्रेमवर्क मेनिफ़ेस्ट में foo@x.y के लिए max-level="F - 1" तय किया गया हो. V = F के साथ लॉन्च होने वाले डिवाइसों के लिए, फ़्रेमवर्क एचएएल 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 वर्शन को हटाते हैं, तो हम ये दोनों चरण पूरे करते हैं:

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

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

रिलीज़ कॉन्फ़िगरेशन के लिए, चरण दर चरण बंद होने की सुविधा

ट्रंक स्टेबल की ब्रांचिंग की रणनीति के तहत, क्वार्टरली प्लैटफ़ॉर्म रिलीज़ (क्यूपीआर) को अलग-अलग रिलीज़-डेवलपमेंट ब्रांच के बजाय सीधे git_main से लिया जाता है. इसके लिए, चरणबद्ध तरीके से बंद करने की प्रक्रिया ज़रूरी है. FCM के किसी वर्शन को trunk_staging बिल्ड में शुरुआती सिग्नल के लिए हटाया जा सकता है. हालांकि, यह रिलीज़ ब्रांच में काम करता रहेगा, ताकि साल भर QPR लेने वाले डिवाइसों को शामिल किया जा सके.

आम तौर पर, फ़्रेमवर्क के किसी रिलीज़ किए गए वर्शन में छह FCM काम करते हैं: एक मौजूदा वर्शन, चार पिछले वर्शन, और एक अतिरिक्त वर्शन, जो QPR के साथ काम करता है. अगर FCM के कुछ वर्शन (जैसे कि Android 15 का 202404) में डिवाइस के लंबे समय तक काम करने की सुविधा के लिए ज़्यादा समय तक सहायता मिलती है, तो यह संख्या बढ़ सकती है.

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

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

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

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

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

  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 वर्शन माना जाता है.

अगर कोई एचएएल वर्शन, सार्वजनिक और फ़्रीज़ की गई कंपैटिबिलिटी मैट्रिक्स में है और उसमें सबसे नया एफ़सीएम वर्शन है, तो एचएएल वर्शन मौजूदा है. इसका मतलब है कि यह पुराना नहीं है. उदाहरण के लिए, मौजूदा एचएएल वर्शन (जैसे कि 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 वर्शन है.
  • यह एक सार्वजनिक और फ़्रीज़ की गई कंपैटबिलिटी मैट्रिक्स में है. फ़्रेमवर्क अब भी इसका इस्तेमाल करता है.

उदाहरण:

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

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