इस सेक्शन में, फ़्रेमवर्क और डिवाइस के साथ काम करने वाले मैट्रिक्स के बारे में बताया गया है. कंपैटबिलिटी मैट्रिक्स स्कीमा. इसके लिए मिलान नियम, देखें नियम.
फ़्रेमवर्क कंपैटबिलिटी मैट्रिक्स (FCM)
फ़्रेमवर्क कम्पैटिबिलिटी मैट्रिक्स (FCM) फ़्रेमवर्क को ऐक्सेस करने की कोशिश करते हैं. फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स में सिस्टम शामिल होता है साथ काम करने वाला मैट्रिक्स, प्रॉडक्ट के साथ काम करने वाला मैट्रिक्स, और system_ext कंपैटबिलिटी मैट्रिक्स का इस्तेमाल करें. FCM की ज़रूरी शर्तें, डिवाइस मेनिफ़ेस्ट के हिसाब से पूरी होनी चाहिए (ज़रूरी शर्तें बिल्ड टाइम, रनटाइम, और वीटीएस के हिसाब से लागू किया जाता है).
system_ext FCM और प्रॉडक्ट FCM, डिवाइस के हिसाब से FCM (इंस्टॉल किए गए) के साथ काम करते हैं में अलग-अलग दिखता है.
- डिवाइस FCM को सिस्टम विभाजन.
- system_ext FCM को system_ext पार्टीशन में मॉड्यूल की ज़रूरी शर्तों को दिखाना चाहिए.
- प्रॉडक्ट 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 टूल मौजूद नहीं है की ज़रूरत सिस्टम इमेज में दी गई है.