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

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

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

शब्दावली

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

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

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

उम्मीद है कि उसी 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

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

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

FCM के नए वर्शन में डेवलप करना

Android, फ़्रेमवर्क की हर रिलीज़ (जैसे, Android 8 और 8.1) के लिए FCM वर्शन को बढ़ाता है. डेवलपमेंट के दौरान, नया 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 के साथ शिप होने वाले डिवाइसों को इस एचएएल के साथ लॉन्च करना ज़रूरी है, तो
  • optional="true" अगर V = F के साथ शिप होने वाले डिवाइस, इस एचएएल के बिना लॉन्च हो सकते हैं.

उदाहरण के लिए, 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>

एचएएल को अपग्रेड करना (मामूली)

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

HAL को अपग्रेड करना (बड़ा अपडेट)

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

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

उदाहरण के लिए, Android 9 में health@2.0 को 1.0 एचएएल के मुख्य वर्शन के अपग्रेड के तौर पर पेश किया गया है. साथ ही, 1.0 एचएएल को बंद कर दिया गया है. Android 8.0 और Android 8.1 के साथ लॉन्च होने वाले डिवाइसों के लिए, health@1.0 का पुराना वर्शन ज़रूरी नहीं है. Android 9 के साथ लॉन्च होने वाले डिवाइसों में, 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>

प्रतिबंध:

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

FCM के नए वर्शन

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

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

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

इसके अलावा, प्रॉडक्ट और system_ext FCMs, हर प्लैटफ़ॉर्म FCM वर्शन के लिए ज़रूरी शर्तों की सूची बना सकते हैं. प्रॉडक्ट और system_ext के partition पर FCM वर्शन रिलीज़ करने का अधिकार, इन इमेज के मालिक के पास होता है. प्रॉडक्ट और system_ext सेक्शन में मौजूद FCM वर्शन के नंबर, system सेक्शन में मौजूद नंबर से मेल खाने चाहिए. सिस्टम पार्टीशन पर मौजूद FCM वर्शन की तरह ही, प्रॉडक्ट और system_ext पार्टीशन में FCM वर्शन F के साथ काम करने वाले मैट्रिक्स से, टारगेट किए गए FCM वर्शन F वाले डिवाइस की ज़रूरी शर्तों के बारे में पता चलता है.

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

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

किसी डिवाइस के एचएएल को बंद करना

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

FCM वर्शन F रिलीज़ होने पर, HAL वर्शन foo@x.y को बंद माना जाता है. ऐसा तब होता है, जब टारगेट FCM वर्शन V = F के लिए, नए FCM में HAL के किसी खास वर्शन के बारे में साफ़ तौर पर नहीं बताया गया हो. 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 का इस्तेमाल नहीं किया जा सकता.

किसी फ़्रेमवर्क एचएएल को बंद करना

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

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 पर सेट है. यह Android 11 में लॉन्च किया गया FCM वर्शन है. Android 12 के फ़्रेमवर्क मेनिफ़ेस्ट देखें.

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

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

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

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

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

HAL वर्शन का स्टेटस

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

अप्रकाशित

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

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

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

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

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

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

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

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

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

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

उदाहरण:

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

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

हटाया गया

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

  • इसे पहले रिलीज़ किया जा चुका है.
  • यह किसी भी सार्वजनिक और फ़्रीज़ किए गए काम करने की क्षमता वाले मैट्रिक्स में नहीं है, जिस पर फ़्रेमवर्क काम करता है.

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

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

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

लेगसी FCM

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

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

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

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

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