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

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

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

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

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

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

सिस्टम के साथ काम करने वाली मैट्रिक्स फ़ाइल का उदाहरण:

<?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 देखें लाइफ़साइकल.

प्रॉडक्ट के साथ काम करने वाला मैट्रिक्स

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

प्रॉडक्ट 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 में फ़्रेमवर्क के साथ काम करने वाली मैट्रिक्स फ़ाइल है विभाजन. VINTF ऑब्जेक्ट, सिस्टम और प्रॉडक्ट में सिस्टम और प्रॉडक्ट में, FCMs के साथ system_ext FCM को जोड़ता है रनटाइम के दौरान पार्टीशन करते हैं. प्रॉडक्ट के साथ काम करने वाला मैट्रिक्स देखें जैसे कि सिस्टम_ext FCM फ़ाइल.

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

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

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 और उसके बाद के वर्शन में, की अनुमति है. इस फ़ाइल के फ़्रेमवर्क कम्पैटिबिलिटी मैट्रिक्स वर्शन (FCM वर्शन) के बारे में बताता है. इसका एलान न करें किसी खास फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स में (जैसे, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
ज़रूरी नहीं है और इसे दोहराया जा सकता है. सूची में एक ऐसा एचएएल (एचआईडीएल या नेटिव) होता है जो कंपैटबिलिटी मैट्रिक्स (फ़्रेमवर्क या डिवाइस) के मालिक को उपस्थित. एचएएल एंट्री को <name> एलिमेंट से पहचाना जाता है; एक ही नाम वाली कई एचएएल एंट्री हो सकती हैं ("और" शर्त का मतलब है).
compatibility-matrix.hal.format
ज़रूरी नहीं. वैल्यू इनमें से एक हो सकती है:
  • "hidl": HIDL एचएएल. यह डिफ़ॉल्ट विकल्प है.
  • "aidl": एआईडीएल एचएएल. यह सिर्फ़ कंपैटबिलिटी मैट्रिक्स मेटा-वर्शन 2.0 पर मान्य है.
  • "native": नेटिव एचएएल.
compatibility-matrix.hal.optional
एट्रिब्यूट की वैल्यू देना ज़रूरी नहीं है और डिफ़ॉल्ट रूप से गलत पर सेट होती है. यह बताता है कि यह एचएएल यह कंपैटबिलिटी मैट्रिक्स (फ़्रेमवर्क या डिवाइस) के मालिक के लिए ज़रूरी नहीं है. अगर कोई <hal> एंट्री को 'ज़रूरी नहीं' के तौर पर मार्क किया गया है. इसका मतलब है कि मालिक ये काम कर सकता है: और एचएएल का इस्तेमाल किया जा सकता है. हालांकि, एचएएल के मौजूद होने की ज़रूरत नहीं पड़ती.
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)

AIDL HAL के लिए, यह 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
ज़रूरी है. Kernel वर्शन. प्रारूप है VERSION.MAJOR_REVISION.MINOR_REVISION. वर्शन और बड़ा संशोधन पूरी तरह से मेल खाने चाहिए. मामूली संशोधन कर्नेल का कम से कम एलटीएस वर्शन होना चाहिए.
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वां बिट छोटा किया गया है; विवरण के लिए, स्ट्रटोल वाला पेज होता है.)
  • 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
ज़रूरी है. से-नीति से जुड़ी सभी एंट्री शामिल हैं. इसका इस्तेमाल सिर्फ़ फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स.
compatibility-matrix.sepolicy.sepolicy-version
ज़रूरी है, दोहराया जा सकता है. इससे नीति के वर्शन की ज़रूरी शर्तों के बारे में पता चलता है. manifest.sepolicy.version से मेल खाता है. किसी एलिमेंट से नीति के अलग-अलग वर्शन के बारे में पता चलता है.
compatibility-matrix.sepolicy.kernel-sepolicy-version
ज़रूरी है. इससे, policydb वर्शन के काम करने का एलान किया जाता है के साथ.
compatibility-matrix.avb.vbmeta-version
ज़रूरी नहीं; इसका इस्तेमाल सिर्फ़ फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स में किया जाता है. एवीबी वर्शन का इस्तेमाल करके system.img को हस्ताक्षर किया जाता है. Android में यह सुविधा अब काम नहीं करती 10.
compatibility-matrix.vendor-ndk
ज़रूरी नहीं; का इस्तेमाल सिर्फ़ डिवाइस के साथ काम करने वाले मैट्रिक्स के लिए किया जाता है. VNDK वेंडर स्नैपशॉट में दी गई ज़रूरी शर्तें. अगर यह जानकारी मौजूद नहीं है, तो वीएनडीके की ज़रूरत नहीं होती पर क्लिक करें.
compatibility-matrix.vendor-ndk.version
ज़रूरी है. एक पॉज़िटिव इंटीजर जो यह बताता है कि VNDK वर्शन, वेंडर इमेज.
compatibility-matrix.vendor-ndk.library
ज़रूरी नहीं, इसे दोहराया जा सकता है. VNDK लाइब्रेरी के उस सेट का एलान करता है जो वेंडर इमेज. एक जैसे मतलब वाले शब्द, जो manifest.vendor-ndk.library से मिलते-जुलते हैं.
compatibility-matrix.system-sdk.version
ज़रूरी नहीं, दोहराया जा सकता है; का इस्तेमाल सिर्फ़ डिवाइस के साथ काम करने वाले मैट्रिक्स के लिए किया जाता है. एलान सिस्टम SDK टूल के वर्शन पर वेंडर ऐप्लिकेशन के लिए ज़रूरी शर्तें. अगर यह मौजूद नहीं है, तो कोई सिस्टम SDK टूल मौजूद नहीं है की ज़रूरत सिस्टम इमेज में दी गई है.