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

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

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

शब्दावली

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

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

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

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

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

जब 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.xml में नया compatibility_matrix.<F-1>.xml कॉपी करें.
  2. फ़ाइल के level एट्रिब्यूट को F पर अपडेट करें.
  3. साथ काम करने वाले इस मैट्रिक्स को डिवाइस पर इंस्टॉल करने के लिए, इससे जुड़े बिल्ड नियम जोड़ें.

पेश है नया एचएएल

डेवलपमेंट के दौरान, मौजूदा FCM वर्शन F पर Android में नया एचएएल (वाई-फ़ाई, एनएफ़सी वगैरह) जोड़ते समय, इन optional सेटिंग के साथ एचएएल को compatibility_matrix.F.xml में जोड़ें:

  • optional="false" अगर V = F के साथ शिप किए जाने वाले डिवाइसों को इस एचएएल के साथ लॉन्च किया जाना चाहिए,
  • अगर V = F के साथ भेजे जाने वाले डिवाइस, इस एचएएल के बिना लॉन्च किए जा सकते हैं, तो optional="true".

उदाहरण के लिए, Android 8.1 ने cas@1.0 को वैकल्पिक एचएएल के तौर पर पेश किया. Android 8.1 के साथ लॉन्च होने वाले डिवाइसों के लिए, इस एचएएल को लागू करने की ज़रूरत नहीं है. इसलिए, compatibility_matrix.F.xml (जिसका नाम कुछ समय के लिए compatibility_matrix.current.xml रखा गया था) में नीचे दी गई एंट्री जोड़ दी गई है:

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

HAL (माइनर) अपग्रेड करना

डेवलपमेंट के दौरान, जब किसी एचएएल को मौजूदा FCM वर्शन F के माइनर वर्शन को x.z से x.(z+1) पर अपग्रेड किया जाता है, तो ऐसा तब होगा, जब वह वर्शन:

  • V = F के साथ लॉन्च होने वाले डिवाइसों के लिए ज़रूरी है, compatibility_matrix.F.xml में x.(z+1) और optional="false" लिखा होना चाहिए.
  • V = F के साथ लॉन्च होने वाले डिवाइसों के लिए ज़रूरी नहीं है. compatibility_matrix.F.xml को compatibility_matrix.<F-1>.xml से x.y-z और वैकल्पिकता को कॉपी करना होगा. साथ ही, वर्शन को x.w-(z+1) (जहां w >= y) में बदलना होगा.

उदाहरण के लिए, Android 8.1 ने broadcastradio@1.1 को 1.0 एचएएल के माइनर वर्शन के तौर पर अपग्रेड किया था. Android 8.0 के साथ लॉन्च होने वाले डिवाइसों के लिए, पुराना वर्शन broadcastradio@1.0 ज़रूरी नहीं है. वहीं, Android 8.1 के साथ लॉन्च होने वाले डिवाइसों के लिए, नया वर्शन broadcastradio@1.1 ज़रूरी नहीं है. compatibility_matrix.1.xml में:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

इस एंट्री को compatibility_matrix.F.xml में कॉपी किया गया और इस तरह बदलाव किया गया:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

एचएएल (मुख्य कंपनी) को अपग्रेड करना

डेवलपमेंट के दौरान, जब किसी एचएएल को मौजूदा FCM वर्शन F में मेजर वर्शन का अपग्रेड दिया जाता है, तो नया मेजर वर्शन x.0, नीचे दी गई optional सेटिंग के साथ compatibility_matrix.F.xml में जोड़ दिया जाता है:

  • सिर्फ़ x.0 वर्शन वाला optional="false". हालांकि, अगर V = F के साथ शिप किए जाने वाले डिवाइस x.0 के साथ लॉन्च होने चाहिए, तो यह ज़रूरी है.
  • optional="false" लेकिन उसी <hal> टैग में पुराने मेजर वर्शन के साथ-साथ, अगर V = F के साथ शिप किए जाने वाले डिवाइस इस एचएएल के साथ लॉन्च किए जाने चाहिए, लेकिन वे किसी पुराने मेजर वर्शन के साथ लॉन्च किए जा सकते हैं, तो वे ऐसा कर सकते हैं.
  • अगर V = F के साथ भेजे जाने वाले डिवाइसों के लिए एचएएल लॉन्च करना ज़रूरी नहीं है, तो optional="true".

उदाहरण के लिए, Android 9 में health@2.0 को 1.0 एचएएल के सबसे बड़े वर्शन के तौर पर लॉन्च किया गया है और इसके बाद, 1.0 एचएएल की सुविधा को बंद कर दिया गया है. Android 8.0 और Android 8.1 के साथ लॉन्च होने वाले डिवाइसों के लिए, health@1.0 का पुराना वर्शन ज़रूरी नहीं है. Android 9 के साथ लॉन्च होने वाले डिवाइसों में, अब बंद हो चुके 1.0 एचएएल की जगह 2.0 का नया वर्शन उपलब्ध नहीं कराना चाहिए. मैं compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, और compatibility_matrix.2.xml:

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>;
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

यह एंट्री compatibility_matrix.F.xml में कॉपी की गई और इसमें इस तरह बदलाव किया गया:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

प्रतिबंध:

  • optional="false" के साथ compatibility_matrix.3.xml में 2.0 एचएएल मौजूद है. इसलिए, Android 9 के साथ लॉन्च होने वाले डिवाइस 2.0 एचएएल के साथ शिप होने चाहिए.
  • compatibility_matrix.3.xml में 1.0 एचएएल मौजूद नहीं है. इसलिए, Android 9 के साथ लॉन्च होने वाले डिवाइसों में 1.0 एचएएल उपलब्ध नहीं होना चाहिए. ऐसा इसलिए, क्योंकि इस एचएएल को अब काम नहीं करता है.
  • 1.0 HAL, लेगसी/1/2.xml (पुराने FCM वर्शन जिनके साथ Android 9 काम कर सकता है) में वैकल्पिक एचएएल के तौर पर मौजूद है. इसलिए, Android 9 फ़्रेमवर्क अब भी 1.0 एचएएल के साथ काम कर सकता है (जिसे हटाया गया एचएएल वर्शन नहीं माना जाता है).

FCM के नए वर्शन

सिस्टम पार्टीशन पर FCM वर्शन रिलीज़ करने की प्रोसेस सिर्फ़ Google की ओर से एओएसपी रिलीज़ के हिस्से के तौर पर की जाती है और इसमें नीचे दिए गए चरण शामिल हैं:

  1. पक्का करें कि compatibility_matrix.F.xml में level="F" एट्रिब्यूट हो.
  2. पक्का करें कि सभी डिवाइस बनाए और चालू हों.
  3. यह पक्का करने के लिए कि शिपिंग एपीआई लेवल पर आधारित नए फ़्रेमवर्क के साथ लॉन्च होने वाले डिवाइसों में, टारगेट FCM वर्शन V >= F है, वीटीएस टेस्ट को अपडेट करें.
  4. एओएसपी पर फ़ाइल पब्लिश करें.

उदाहरण के लिए, वीटीएस टेस्ट से यह पक्का होता है कि Android 9 के साथ लॉन्च होने वाले डिवाइसों में, टारगेट FCM वर्शन >= 3 हो.

इसके अलावा, प्रॉडक्ट और system_ext FCMs, हर प्लैटफ़ॉर्म के FCM वर्शन के लिए ज़रूरी शर्तों की सूची बना सकते हैं. इन इमेज के मालिक, प्रॉडक्ट और सिस्टम_एक्स्ट पार्टिशन पर FCM वर्शन रिलीज़ करते हैं. प्रॉडक्ट और system_ext विभाजनों में मौजूद FCM वर्शन की संख्या, सिस्टम पार्टिशन में मौजूद FCM वर्शन की संख्याओं के साथ अलाइन होनी चाहिए. सिस्टम पार्टीशन पर मौजूद FCM वर्शन की तरह ही, प्रॉडक्ट में FCM वर्शन F पर कंपैटबिलिटी मैट्रिक्स और system_ext पार्टिशन{/1}, टारगेट FCM वर्शन F वाले डिवाइस पर ज़रूरी शर्तों को दिखाते हैं.

एचएएल वर्शन का दिखना बंद हो गया है

एचएएल वर्शन को बंद करना, डेवलपर के हिसाब से लिया गया है. इसका मतलब है कि एओएसपी एचएएल के लिए Google खुद फ़ैसला लेता है. ऐसा तब हो सकता है, जब एचएएल का कोई नया वर्शन रिलीज़ किया गया हो, भले ही वह छोटा हो या बड़ा.

डिवाइस के एचएएल का इस्तेमाल बंद करें

जब किसी डिवाइस के HAL foo@x.y को FCM वर्शन F में बंद कर दिया जाता है, तो इसका मतलब है कि टारगेट FCM वर्शन V = F या उसके बाद के वर्शन के साथ लॉन्च होने वाले किसी भी डिवाइस पर, x.y या x.y से पुराने वर्शन वाले किसी भी वर्शन पर foo लागू नहीं किया जाना चाहिए. डिवाइस अपग्रेड करने के लिए, फ़्रेमवर्क अब भी एचएएल वर्शन के साथ काम नहीं करता है.

FCM वर्शन F रिलीज़ होने पर, अगर टारगेट FCM वर्शन V = F के लिए, FCM के नए वर्शन में किसी एचएएल वर्शन के बारे में साफ़ तौर पर नहीं बताया गया है, तो एचएएल वर्शन foo@x.y को बंद माना जाता है. V = F के साथ लॉन्च होने वाले डिवाइसों के लिए, इनमें से एक शर्त पूरी होती है:

  • फ़्रेमवर्क का इस्तेमाल करने के लिए, नया वर्शन (मेजर या माइनर) ज़रूरी है;
  • अब फ़्रेमवर्क को एचएएल की ज़रूरत नहीं है.

उदाहरण के लिए, Android 9 में health@2.0 को 1.0 एचएएल के मेजर वर्शन के तौर पर अपग्रेड किया गया है. health@1.0 को compatibility_matrix.3.xml से हटा दिया गया है. हालांकि, यह compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, और compatibility_matrix.2.xml में मौजूद है. इसलिए, health@1.0 को अब काम नहीं करता है.

फ़्रेमवर्क एचएएल का इस्तेमाल बंद करना

FCM वर्शन F में दिए गए फ़्रेमवर्क HAL foo@x.y के काम न करने पर, इसका मतलब है कि टारगेट FCM वर्शन V = F या इसके बाद के वर्शन के साथ लॉन्च होने वाले किसी भी डिवाइस में, x.y या x.y से पुराने वर्शन पर foo उपलब्ध कराने की उम्मीद नहीं की जानी चाहिए. हालांकि, डिवाइसों को अपग्रेड करने के लिए, फ़्रेमवर्क अब भी एचएएल का पुराना वर्शन उपलब्ध कराता है.

FCM वर्शन F रिलीज़ होने पर, अगर फ़्रेमवर्क मेनिफ़ेस्ट में foo@x.y के लिए max-level="F - 1" तय करता है, तो एचएएल वर्शन foo@x.y को बंद माना जाता है. V = F के साथ लॉन्च होने वाले डिवाइसों के लिए, फ़्रेमवर्क एचएएल foo@x.y उपलब्ध नहीं कराता. V = F के साथ लॉन्च होने वाले डिवाइसों पर, डिवाइस के साथ काम करने वाले मैट्रिक्स में max-level < V वाले फ़्रेमवर्क एचएएल की सूची नहीं होनी चाहिए.

उदाहरण के लिए, Android 12 में schedulerservice@1.0 अब सेवा में नहीं है. इसके max-level एट्रिब्यूट को 5 पर सेट किया गया है. यह Android 11 में लॉन्च किया गया FCM वर्शन है. Android 12 फ़्रेमवर्क मेनिफ़ेस्ट देखें.

टारगेट FCM वर्शन के लिए सहायता हटाना

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

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

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

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

एचएएल वर्शन की स्थिति

यहां दिए गए सेक्शन में, एचएएल वर्शन की संभावित स्थितियों के बारे में समय के हिसाब से बताया गया है.

अप्रकाशित

डिवाइस एचएएल के लिए, अगर एचएएल वर्शन किसी भी सार्वजनिक और फ़्रोज़न कंपैटिबिलिटी मैट्रिक्स में नहीं है, तो उसे रिलीज़ नहीं किया गया और डेवलपमेंट की स्थिति में हो सकता है. इसमें सिर्फ़ compatibility_matrix.F.xml वर्शन वाले HAL वर्शन शामिल हैं. उदाहरण:

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

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

रिलीज़ किया गया और मौजूदा वर्शन

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

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

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

रिलीज़ किया गया, लेकिन अब काम नहीं करता

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

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

उदाहरण:

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

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

हटा दिया गया है

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

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

हटाए गए एचएएल वर्शन के सेट को तय करने के लिए, ऐसे कंपैटिबिलिटी मैट्रिक्स को कोड बेस में रखा जाता है जो सार्वजनिक हैं, फ़्रीज़ किए गए हैं, लेकिन फ़्रेमवर्क के साथ काम नहीं करते. इससे वीटीएस टेस्ट करके यह पक्का किया जा सकता है कि हटाए गए एचएएल नए डिवाइसों पर न हों.

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

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

लेगसी FCM

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

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

रिलीज़ किए गए FCM वर्शन

रिलीज़ किए गए FCM वर्शन की सूची hardware/interfaces/compatibility_matrices में दी गई है.

Android की किसी खास रिलीज़ के साथ रिलीज़ किया गया FCM वर्शन ढूंढने के लिए, Level.h देखें.