कंपैटिबिलिटी मैट्रिक्स

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

फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स (एफ़सीएम)

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

system_ext FCM और प्रॉडक्ट FCM, डिवाइस के हिसाब से FCM (सिस्टम सेगमेंट में इंस्टॉल किया गया) के साथ काम करते हैं.

  • डिवाइस के FCM में, सिस्टम पार्टीशन में मौजूद मॉड्यूल की ज़रूरी शर्तें दिखनी चाहिए.
  • system_ext FCM में, system_ext पार्टीशन में मौजूद मॉड्यूल की ज़रूरी शर्तें दिखनी चाहिए.
  • प्रॉडक्ट एफ़सीएम में, प्रॉडक्ट के बंटवारे में मौजूद मॉड्यूल के हिसाब से ज़रूरी शर्तें दिखनी चाहिए.

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

सिस्टम की कंपैटिबिलिटी मैट्रिक्स फ़ाइल का उदाहरण:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

ज़्यादा जानकारी के लिए, FCM के लाइफ़साइकल के बारे में लेख पढ़ें.

प्रॉडक्ट की कंपैटबिलिटी मैट्रिक

प्रॉडक्ट एफ़सीएम, प्रॉडक्ट के सेगमेंट में मौजूद फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स फ़ाइल है. रनटाइम के दौरान, VINTF ऑब्जेक्ट, प्रॉडक्ट FCM को सिस्टम और system_ext के सेगमेंट में मौजूद FCM से जोड़ता है.

प्रॉडक्ट की FCM फ़ाइल का उदाहरण:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

System_ext की कंपैटिबिलिटी मैट्रिक्स

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

डिवाइस के साथ काम करने की जानकारी देने वाला मैट्रिक्स (DCM)

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

DCM फ़ाइल का उदाहरण:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

कंपैटिबिलिटी मैट्रिक्स स्कीमा

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

?xml
ज़रूरी नहीं. यह सिर्फ़ एक्सएमएल पार्स करने वाले टूल को जानकारी देता है.
compatibility-matrix.version
ज़रूरी है. इस काम करने की सुविधा वाले मैट्रिक का मेटा-वर्शन. इस एलिमेंट से, काम करने की सुविधा वाले मैट्रिक्स में मौजूद एलिमेंट के बारे में पता चलता है. यह एक्सएमएल वर्शन से जुड़ा नहीं है.
compatibility-matrix.type
ज़रूरी है. इस कम्पैटिबिलिटी मैट्रिक का टाइप:
  • "device": डिवाइस के साथ काम करने की जानकारी देने वाली मैट्रिक्स.
  • "framework": फ़्रेमवर्क के साथ काम करने की मैट्रिक्स.
manifest.level
फ़्रेमवर्क की कंपैटबिलिटी मैट्रिक्स के लिए ज़रूरी है. Android 12 और इसके बाद के वर्शन में, प्रॉडक्ट और system_ext पार्टीशन में फ़्रेमवर्क के साथ काम करने की मैट्रिक्स फ़ाइलों में अनुमति है. इस फ़ाइल के फ़्रेमवर्क कंपैटिबिलिटी मैट्रिक वर्शन (एफ़सीएम वर्शन) के बारे में बताता है. डिवाइस के हिसाब से कंपैटबिलिटी फ़्रेमवर्क मैट्रिक्स (जैसे कि DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE) में इसकी जानकारी न दें.
compatibility-matrix.hal
यह ज़रूरी नहीं है और इसे दोहराया जा सकता है. इस एट्रिब्यूट में, एक ऐसे एचएएल (एचआईडीएल या नेटिव) की सूची दी जाती है जिसे कंपैटिबिलिटी मैट्रिक्स (फ़्रेमवर्क या डिवाइस) के मालिक को मौजूद रखना ज़रूरी है. एचएएल एंट्री को <name> एलिमेंट से अलग किया जाता है; एक ही नाम वाली कई एचएएल एंट्री हो सकती हैं (इसका मतलब "और" शर्त से है).
compatibility-matrix.hal.format
ज़रूरी नहीं. वैल्यू इनमें से कोई एक हो सकती है:
  • "hidl": HIDL HALs. यह डिफ़ॉल्ट विकल्प है.
  • "aidl": AIDL HALs. यह सिर्फ़ काम करने की क्षमता वाली मैट्रिक के मेटा-वर्शन 2.0 पर मान्य है.
  • "native": नेटिव एचएएल.
compatibility-matrix.hal.optional (Android 15 या उससे पहले के वर्शन)
एट्रिब्यूट की वैल्यू देना ज़रूरी नहीं है. यह डिफ़ॉल्ट रूप से 'गलत' पर सेट होता है. इससे पता चलता है कि कम्पैटिबिलिटी मैट्रिक्स (फ़्रेमवर्क या डिवाइस) के मालिक के लिए, यह एचएएल वैकल्पिक है या नहीं. अगर किसी <hal> एंट्री को ज़रूरी नहीं के तौर पर मार्क किया गया है, तो इसका मतलब है कि मालिक, अगर यह एचएएल मौजूद है, तो इसका इस्तेमाल कर सकता है. हालांकि, इसके मौजूद होने की ज़रूरत नहीं है.
चेतावनी: Android 15 के बाद, इस एट्रिब्यूट का इस्तेमाल नहीं किया जा सकता और इसका कोई असर नहीं पड़ता. अगर किसी एचएएल को इंस्टॉल करना ज़रूरी है, तो इस ज़रूरी शर्त को टेस्ट में लागू किया जाना चाहिए.
compatibility-matrix.hal.name
ज़रूरी है. इस एचएएल का पूरा पैकेज नाम. उदाहरण:
  • android.hardware.camera (HIDL या AIDL HAL)
  • GLES (नेटिव एचएएल, सिर्फ़ नाम की ज़रूरत है)
compatibility-matrix.hal.version
वर्शन की रेंज की सूची (HAL मैच देखें), जो बताती है कि काम करने की शर्तों के मैट्रिक्स (फ़्रेमवर्क या डिवाइस) के मालिक को किन वर्शन की उम्मीद है.

HIDL और नेटिव एचएएल के लिए ज़रूरी है. डुप्लीकेट के बिना दोहराया जा सकता है. फ़ॉर्मैट इनमें से कोई एक है:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (MAJOR.MINOR-MINOR के बराबर)

एआईडीएल एचएएल के लिए, यह ज़रूरी है कि Android 11 और उससे पहले के वर्शन वाले डिवाइसों पर यह मौजूद न हो. यह विकल्प, नए वर्शन वाले डिवाइसों पर ज़रूरी नहीं है. अगर यह जानकारी दी गई है, तो फ़ॉर्मैट इनमें से कोई एक होगा:
  • VERSION_MIN-VERSION_MAX
  • VERSION (VERSION-VERSION के बराबर)
अगर कोई वैल्यू नहीं दी गई है, तो डिफ़ॉल्ट रूप से वैल्यू 1 होगी.
compatibility-matrix.hal.interface
ज़रूरी नहीं, दोहराया जा सकता है. इस एचएएल के ज़रूरी इंटरफ़ेस की सूची.
compatibility-matrix.hal.interface.name
ज़रूरी है. इंटरफ़ेस का नाम.
compatibility-matrix.hal.interface.instance
ज़रूरी नहीं, दोहराया जा सकता है. इस इंटरफ़ेस के ज़रूरी इंस्टेंस की सूची.
compatibility-matrix.hal.interface.regex-instance
ज़रूरी नहीं, दोहराया जा सकता है. इस इंटरफ़ेस पर, इंस्टेंस के नाम के लिए ज़रूरी पैटर्न की सूची. एक्सटेंडेड रेगुलर एक्सप्रेशन फ़ॉर्मैट का इस्तेमाल करें.
compatibility-matrix.kernel
ज़रूरी नहीं, दोहराया जा सकता है. उन कर्नेल कॉन्फ़िगरेशन की सूची दें जिनकी ज़रूरत फ़्रेमवर्क को हर कर्नेल वर्शन पर होती है.
एक ही <version> के साथ कई <kernel> मौजूद हो सकते हैं, ताकि "और" रिलेशनशिप का पता चल सके. हर <kernel>, ज़रूरी शर्तों का एक "फ़्रैगमेंट" होता है. यह सिर्फ़ तब चालू होता है, जब <conditions> पूरी हो गई हों.
compatibility-matrix.kernel.version
ज़रूरी है. कर्नेल वर्शन. फ़ॉर्मैट VERSION.MAJOR_REVISION.MINOR_REVISION है. वर्शन और मेजर रिविज़न पूरी तरह से मेल खाने चाहिए. माइनर रिविज़न से, फ़्रेमवर्क के लिए ज़रूरी केर्नेल के कम से कम LTS वर्शन के बारे में पता चलता है.
compatibility-matrix.kernel.condition
ज़रूरी नहीं. हर वर्शन के पहले <kernel> के लिए, यह मौजूद नहीं होना चाहिए. शर्तों की सूची तय करता है. शर्तें पूरी होने पर, इस <kernel> फ़्रैगमेंट में बताई गई ज़रूरी शर्तें चालू हो जाती हैं.
compatibility-matrix.kernel.config
ज़रूरी नहीं, दोहराया जा सकता है. इस सूची में CONFIG ऐसे आइटम होते हैं जिन्हें इस कर्नेल वर्शन के लिए मैच करना ज़रूरी है. हर CONFIG आइटम, एक की-वैल्यू पेयर होता है. कॉन्फ़िगरेशन आइटम को की से अलग किया जाता है.
compatibility-matrix.kernel.config.key
ज़रूरी है. CONFIG आइटम का मुख्य नाम. CONFIG_ से शुरू होता है.
compatibility-matrix.kernel.config.value
ज़रूरी है. CONFIG आइटम की वैल्यू. फ़ॉर्मैट, टाइप के हिसाब से होता है:
  • string. कोटेशन हटा दिए जाते हैं.
  • int. दशमलव और हेक्साडेसिमल (0x या 0X) से शुरू होना चाहिए) वैल्यू स्वीकार की जाती हैं. इसे 64-बिट पूर्णांक के तौर पर इंटरप्रेट किया जाता है; ओवरफ़्लो होने पर, इसे छोटा कर दिया जाता है. (पार्सर -264 + 1 से लेकर 264 - 1 तक की वैल्यू स्वीकार करता है. 65वां बिट काट दिया जाता है. ज़्यादा जानकारी के लिए, strtoull के मैन पेज पर जाएं.)
  • range. फ़ॉर्मैट [int]-[int] है, जैसे कि 10-20. हेक्साडेसिमल वैल्यू स्वीकार की जाती हैं. साथ ही, ये वैल्यू 0x या 0X से शुरू होनी चाहिए. दोनों सीमाएं, बिना हस्ताक्षर वाला 64-बिट वाला पूर्णांक होनी चाहिए.
  • tristate. मान्य वैल्यू y, m, और n हैं.
compatibility-matrix.kernel.config.value.type
ज़रूरी है. CONFIG आइटम की वैल्यू का टाइप, इनमें से कोई एक:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
ज़रूरी है. इसमें sepolicy से जुड़ी सभी एंट्री शामिल होती हैं. इसका इस्तेमाल सिर्फ़ फ़्रेमवर्क के साथ काम करने वाले मैट्रिक के लिए किया जाता है.
compatibility-matrix.sepolicy.sepolicy-version
ज़रूरी है, दोहराया जा सकता है. sepolicy वर्शन की ज़रूरी शर्तों के बारे में बताता है. manifest.sepolicy.version के लिए इस्तेमाल किया जाता है. किसी एलिमेंट के हर इंस्टेंस से, sepolicy के वर्शन की एक रेंज तय होती है.
compatibility-matrix.sepolicy.kernel-sepolicy-version
ज़रूरी है. यह policydb के उस वर्शन के बारे में बताता है जिस पर फ़्रेमवर्क काम करता है.
compatibility-matrix.avb.vbmeta-version
ज़रूरी नहीं; इसका इस्तेमाल सिर्फ़ फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स के लिए किया जाता है. system.img पर हस्ताक्षर करने के लिए इस्तेमाल किए गए AVB वर्शन के बारे में बताता है. Android 10 में काम नहीं करता.
compatibility-matrix.vendor-ndk
ज़रूरी नहीं है. इसका इस्तेमाल सिर्फ़ डिवाइस के साथ काम करने वाले मैट्रिक्स के लिए किया जाता है. VNDK वेंडर स्नैपशॉट की ज़रूरत के बारे में बताता है. अगर यह पैरामीटर मौजूद नहीं है, तो सिस्टम इमेज पर VNDK की कोई ज़रूरी शर्त नहीं बनाई जाती.
compatibility-matrix.vendor-ndk.version
ज़रूरी है. एक पॉज़िटिव इंटिजर, जो वेंडर इमेज के लिए ज़रूरी VNDK वर्शन के बारे में बताता है.
compatibility-matrix.vendor-ndk.library
ज़रूरी नहीं, दोहराया जा सकता है. वेंडर इमेज के लिए ज़रूरी VNDK लाइब्रेरी का सेट तय करता है. manifest.vendor-ndk.library के जैसे सिमेंटिक.
compatibility-matrix.system-sdk.version
ज़रूरी नहीं, दोहराया जा सकता है; इसका इस्तेमाल सिर्फ़ डिवाइस के साथ काम करने की जानकारी देने वाले मैट्रिक्स में किया जाता है. इससे, सिस्टम के SDK टूल के वर्शन के लिए, वेंडर ऐप्लिकेशन की ज़रूरी शर्तों के बारे में पता चलता है. अगर यह एट्रिब्यूट मौजूद नहीं है, तो सिस्टम इमेज के लिए सिस्टम SDK की ज़रूरत नहीं होती.