VINTF ऑब्जेक्ट, डिवाइस मेनिफ़ेस्ट और फ़्रेमवर्क मेनिफ़ेस्ट फ़ाइलों (एक्सएमएल) से डेटा इकट्ठा करता है. दोनों मेनिफ़ेस्ट एक ही फ़ॉर्मैट में होते हैं. हालांकि, दोनों पर सभी एलिमेंट लागू नहीं होते. स्कीमा के बारे में ज़्यादा जानने के लिए, मेनिफ़ेस्ट फ़ाइल स्कीमा देखें.
डिवाइस मेनिफ़ेस्ट
डिवाइस मेनिफ़ेस्ट (डिवाइस से दिया गया) में वेंडर मेनिफ़ेस्ट और ओडीएम मेनिफ़ेस्ट शामिल होते हैं.
- वेंडर मेनिफ़ेस्ट में, SoC के लिए सामान्य तौर पर इस्तेमाल होने वाले एचएएल, SELinux नीति के वर्शन वगैरह की जानकारी होती है. हमारा सुझाव है कि इसे Android सोर्स ट्री में
device/VENDOR/DEVICE/manifest.xml
पर डाला जाए. हालांकि, एक से ज़्यादा फ़्रैगमेंट फ़ाइलों का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, मेनिफ़ेस्ट फ़्रैगमेंट और फ़्रैगमेंट से डीएम जनरेट करना देखें. - ओडीएम मेनिफ़ेस्ट में, ओडीएम पार्टीशन में मौजूद प्रॉडक्ट के हिसाब से एचएएल की सूची होती है.
VINTF ऑब्जेक्ट, ODM मेनिफ़ेस्ट को इस क्रम में लोड करता है:
- अगर
SKU
तय किया गया है (जहांSKU
, प्रॉपर्टीro.boot.product.hardware.sku
की वैल्यू है), तो/odm/etc/vintf/manifest_SKU.xml
/odm/etc/vintf/manifest.xml
- अगर
SKU
की वैल्यू दी गई है, तो/odm/etc/manifest_SKU.xml
/odm/etc/manifest.xml
- अगर
- वेंडर मेनिफ़ेस्ट में, वेंडर पार्टीशन में मौजूद प्रॉडक्ट के हिसाब से एचएएल की सूची होती है.
VINTF ऑब्जेक्ट, वेंडर मेनिफ़ेस्ट को इस क्रम में लोड करता है:
- अगर
SKU
तय किया गया है (जहांSKU
, प्रॉपर्टीro.boot.product.vendor.sku
की वैल्यू है), तो/vendor/etc/vintf/manifest_SKU.xml
/vendor/etc/vintf/manifest.xml
- अगर
- VINTF ऑब्जेक्ट, डिवाइस मेनिफ़ेस्ट को इस क्रम में लोड करता है:
- अगर वेंडर मेनिफ़ेस्ट मौजूद है, तो इन चीज़ों को जोड़ें:
- वेंडर मेनिफ़ेस्ट
- वेंडर मेनिफ़ेस्ट के वैकल्पिक फ़्रैगमेंट
- वैकल्पिक ओडीएम मेनिफ़ेस्ट
- वैकल्पिक ODM मेनिफ़ेस्ट फ़्रैगमेंट
- अगर ODM मेनिफ़ेस्ट मौजूद है, तो ODM मेनिफ़ेस्ट को वैकल्पिक ODM मेनिफ़ेस्ट फ़्रैगमेंट के साथ जोड़ें.
/vendor/manifest.xml
(लेगसी, कोई फ़्रैगमेंट नहीं)- आखिर में, किसी भी वेंडर के APEX से मेनिफ़ेस्ट फ़्रैगमेंट को आपस में जोड़ें. मेनिफ़ेस्ट फ़्रैगमेंट, हर APEX (उदाहरण के लिए,
/apex/<apex name>/etc/vintf
) कीetc/vintf
डायरेक्ट्री से लोड किए जाते हैं.
ध्यान दें कि:
- लेगसी डिवाइसों पर, लेगसी वेंडर मेनिफ़ेस्ट और ओडीएम मेनिफ़ेस्ट का इस्तेमाल किया जाता है. ओडीएम मेनिफ़ेस्ट, वेंडर के लेगसी मेनिफ़ेस्ट को पूरी तरह से बदल सकता है.
- Android 9 के साथ लॉन्च किए गए डिवाइसों पर, ओडीएम मेनिफ़ेस्ट को वेंडर मेनिफ़ेस्ट के साथ जोड़ा जाता है.
- मेनिफ़ेस्ट की सूची को जोड़ते समय, सूची में बाद में दिखने वाले मेनिफ़ेस्ट, सूची में पहले दिखने वाले मेनिफ़ेस्ट के टैग को बदल सकते हैं. हालांकि, ऐसा तब ही होगा, जब बाद में दिखने वाले मेनिफ़ेस्ट के टैग में
override="true"
एट्रिब्यूट हो. उदाहरण के लिए, हो सकता है कि ODM मेनिफ़ेस्ट, वेंडर मेनिफ़ेस्ट के कुछ<hal>
टैग को बदल दे.override
एट्रिब्यूट के लिए, यहां दिया गया दस्तावेज़ देखें.
- अगर वेंडर मेनिफ़ेस्ट मौजूद है, तो इन चीज़ों को जोड़ें:
इस सेटअप की मदद से, एक ही बोर्ड वाले कई प्रॉडक्ट एक ही वेंडर इमेज (जो सामान्य एचएएल उपलब्ध कराती है) शेयर कर सकते हैं. हालांकि, इनमें अलग-अलग ओडीएम इमेज (जो प्रॉडक्ट के हिसाब से एचएएल तय करती हैं) हो सकती हैं.
यहां वेंडर मेनिफ़ेस्ट का उदाहरण दिया गया है.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="2.0" type="device" target-level="1"> <hal> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.4</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> <instance>proprietary/0</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <version>1.0</version> <version>2.0</version> <interface> <name>INfc</name> <instance>nfc_nci</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <fqname>@2.0::INfc/default</fqname> </hal> <hal> <name>android.hardware.drm</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ICryptoFactory</name> <instance>default</instance> </interface> <interface> <name>IDrmFactory</name> <instance>default</instance> </interface> <fqname>@1.1::ICryptoFactory/clearkey</fqname> <fqname>@1.1::IDrmFactory/clearkey</fqname> </hal> <hal format="aidl"> <name>android.hardware.light</name> <version>1</version> <fqname>ILights/default</fqname> </hal> <hal format="aidl"> <name>android.hardware.power</name> <version>2</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <hal format="native"> <name>GLES</name> <version>1.1</version> <version>2.0</version> <version>3.0</version> </hal> <sepolicy> <version>25.0</version> </sepolicy> </manifest>
यहां ओडीएम मेनिफ़ेस्ट का एक उदाहरण दिया गया है.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device"> <!-- camera 3.4 in vendor manifest is ignored --> <hal override="true"> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.5</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> </interface> </hal> <!-- NFC is declared to be disabled --> <hal override="true"> <name>android.hardware.nfc</name> <transport>hwbinder</transport> </hal> <hal> <name>android.hardware.power</name> <transport>hwbinder</transport> <version>1.1</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> </manifest>
यहां ओटीए पैकेज में डिवाइस मेनिफ़ेस्ट का उदाहरण दिया गया है.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device" target-level="1"> <!-- hals ommited --> <kernel version="4.4.176"> <config> <key>CONFIG_ANDROID</key> <value>y</value> </config> <config> <key>CONFIG_ARM64</key> <value>y</value> </config> <!-- other configs ommited --> </kernel> </manifest>
ज़्यादा जानकारी के लिए, डिवाइस मेनिफ़ेस्ट का डेवलपमेंट लेख पढ़ें.
फ़्रेमवर्क मेनिफ़ेस्ट
फ़्रेमवर्क मेनिफ़ेस्ट फ़ाइल में सिस्टम मेनिफ़ेस्ट, प्रॉडक्ट मेनिफ़ेस्ट, और system_ext मेनिफ़ेस्ट शामिल होता है.
-
Google की ओर से दिया गया सिस्टम मेनिफ़ेस्ट, मैन्युअल तरीके से जनरेट किया जाता है और यह
/system/libhidl/manifest.xml
पर मौजूद Android सोर्स ट्री में मौजूद होता है. - डिवाइस से मिलने वाले प्रॉडक्ट मेनिफ़ेस्ट में, उन एचएएल की सूची होती है जिन्हें प्रॉडक्ट के partition पर इंस्टॉल किए गए मॉड्यूल से सेवा दी जाती है.
-
डिवाइस से मिलने वाले system_ext मेनिफ़ेस्ट में ये चीज़ें शामिल होती हैं:
- system_ext पार्टीशन पर इंस्टॉल किए गए मॉड्यूल से काम करने वाले एचएएल;
- VNDK के वर्शन;
- सिस्टम के SDK टूल का वर्शन.
डिवाइस मेनिफ़ेस्ट की तरह, कई फ़्रैगमेंट फ़ाइलों का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, मेनिफ़ेस्ट फ़्रैगमेंट देखें.
यहां फ़्रेमवर्क मेनिफ़ेस्ट का एक उदाहरण दिया गया है.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="framework"> <hal> <name>android.hidl.allocator</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <transport arch="32+64">passthrough</transport> <version>1.0</version> <interface> <name>IMapper</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.manager</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.frameworks.sensorservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <hal max-level="5"> <name>android.frameworks.schedulerservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISchedulingPolicyService</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </manifest>
मेनिफ़ेस्ट फ़्रैगमेंट
Android 10 और उसके बाद के वर्शन में, बिल्ड सिस्टम में किसी मेनिफ़ेस्ट एन्ट्री को एचएएल मॉड्यूल से जोड़ा जा सकता है. इससे, बिल्ड सिस्टम में HAL मॉड्यूल को शर्त के हिसाब से शामिल करना आसान हो जाता है.
उदाहरण
अपनी Android.bp
या Android.mk
फ़ाइल में, cc_binary
या rust_binary
जैसे किसी भी ऐसे मॉड्यूल में
vintf_fragments
जोड़ें जो डिवाइस पर साफ़ तौर पर इंस्टॉल किया गया है.
उदाहरण के लिए, अपने एचएएल (my.package.foo@1.0-service-bar
) को लागू करके, मॉड्यूल में बदलाव किया जा सकता है.
... { ... vintf_fragments: ["manifest_foo.xml"], ... }
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
manifest_foo.xml
नाम की फ़ाइल में, इस मॉड्यूल के लिए मेनिफ़ेस्ट बनाएं. बिल्ड के समय, यह मेनिफ़ेस्ट डिवाइस में जोड़ दिया जाता है. यहां कोई एंट्री जोड़ना, डिवाइस के मुख्य मेनिफ़ेस्ट में एंट्री जोड़ने जैसा ही है.
इससे क्लाइंट, इंटरफ़ेस का इस्तेमाल कर सकते हैं. साथ ही, VTS यह पता लगा सकता है कि डिवाइस पर कौनसे HAL लागू किए गए हैं. रेगुलर मेनिफ़ेस्ट के सभी काम, यह मेनिफ़ेस्ट भी करता है.
नीचे दिए गए उदाहरण में, android.hardware.foo@1.0::IFoo/default
को लागू किया गया है. इसे
vendor
या odm
पार्टीशन में इंस्टॉल किया गया है. अगर इसे system
, product
या system_ext
partition में इंस्टॉल किया गया है, तो टाइप device
के बजाय टाइप framework
का इस्तेमाल करें.
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.foo</name> <transport>hwbinder</transport> <fqname>@1.0::IFoo/default</fqname> </hal> </manifest>
अगर किसी एचएएल मॉड्यूल को वेंडर एपीईएक्स में पैकेज किया गया है, तो उससे जुड़े VINTF फ़्रैगमेंट को उसी एपीईएक्स में prebuilt_etc
के साथ पैकेज करें, जैसा कि VINTF फ़्रैगमेंट में बताया गया है.
मेनिफ़ेस्ट फ़ाइल का स्कीमा
इस सेक्शन में, इन एक्सएमएल टैग के बारे में बताया गया है. Android सोर्स ट्री में मौजूद सोर्स फ़ाइल में, कुछ "ज़रूरी" टैग मौजूद न हो सकते. साथ ही, ये टैग बिल्ड के समय assemble_vintf
के ज़रिए लिखे जा सकते हैं. डिवाइस पर, ज़रूरी टैग, उनसे जुड़ी फ़ाइलों में मौजूद होने चाहिए.
?xml
- ज़रूरी नहीं. सिर्फ़ एक्सएमएल पार्सर को जानकारी देता है.
manifest.version
- ज़रूरी है. इस मेनिफ़ेस्ट का मेटा-वर्शन. इससे मेनिफ़ेस्ट में मौजूद एलिमेंट के बारे में पता चलता है. यह एक्सएमएल वर्शन से जुड़ा नहीं है.
manifest.type
- ज़रूरी है. इस मेनिफ़ेस्ट का टाइप. डिवाइस मेनिफ़ेस्ट फ़ाइल के लिए इसकी वैल्यू
device
और फ़्रेमवर्क मेनिफ़ेस्ट फ़ाइल के लिएframework
है. manifest.target-level
- डिवाइस मेनिफ़ेस्ट के लिए ज़रूरी है. फ़्रेमवर्क के साथ काम करने की जानकारी देने वाले मैट्रिक्स (एफ़सीएम) के उस वर्शन के बारे में बताता है जिसके साथ इस डिवाइस मेनिफ़ेस्ट को काम करने के लिए टारगेट किया गया है. इसे डिवाइस का शिपिंग FCM वर्शन भी कहा जाता है.
manifest.hal
- ज़रूरी नहीं, दोहराया जा सकता है.
format
एट्रिब्यूट के आधार पर, एक HAL (HIDL या नेटिव, जैसे कि GL). manifest.hal.format
- ज़रूरी नहीं. वैल्यू इनमें से कोई एक हो सकती है:
hidl
: HIDL HALs. यह डिफ़ॉल्ट विकल्प है.aidl
: AIDL HALs. सिर्फ़ मेनिफ़ेस्ट के मेटा-वर्शन 2.0 और उसके बाद के वर्शन के लिए मान्य है.native
: नेटिव एचएएल.
manifest.hal.max-level
- ज़रूरी नहीं. सिर्फ़ फ़्रेमवर्क मेनिफ़ेस्ट पर मान्य है. अगर यह सेट है, तो फ़्रेमवर्क मेनिफ़ेस्ट में टारगेट FCM वर्शन से ज़्यादा लेवल वाले एचएएल बंद कर दिए जाते हैं.
manifest.hal.override
- ज़रूरी नहीं. वैल्यू इनमें से कोई एक हो सकती है:
true
: एक ही<name>
और मेजर वर्शन वाले अन्य<hal>
एलिमेंट को बदलें. अगर इस<hal>
एलिमेंट में कोई<version>
या<fqname>
नहीं है, तो<hal>
एलिमेंट यह बताता है कि इस एचएएल को बंद कर दिया गया है.false
: एक ही<name>
और मेजर वर्शन वाले अन्य<hal>
एलिमेंट को बदलना
manifest.hal.name
- ज़रूरी है. एचएएल का पूरी तरह क्वालिफ़ाइड पैकेज नेम. एक से ज़्यादा एचएएल एंट्री में एक ही नाम का इस्तेमाल किया जा सकता है. उदाहरण:
android.hardware.camera
(HIDL या AIDL HAL)GLES
(नेटिव एचएएल, सिर्फ़ नाम की ज़रूरत है)
manifest.hal.transport
manifest.hal.format == "hidl"
के लिए ज़रूरी है. अगर ऐसा नहीं है, तो यह एट्रिब्यूट मौजूद नहीं होना चाहिए. इससे पता चलता है कि इस पैकेज के किसी इंटरफ़ेस से सेवा मैनेजर से क्वेरी करने पर, किस ट्रांसपोर्ट का इस्तेमाल किया जाता है. वैल्यू इनमें से कोई एक हो सकती है:hwbinder
: बाइंडर मोडpassthrough
: पास-थ्रू मोड
manifest.hal.format == "aidl"
होने पर ज़रूरी नहीं. अगर ऐसा नहीं है, तो यह एट्रिब्यूट मौजूद नहीं होना चाहिए. इससे पता चलता है कि किसी इंटरफ़ेस को रिमोट तौर पर दिखाने के लिए, किस ट्रांसपोर्ट का इस्तेमाल किया जाता है. वैल्यू इनमें से कोई एक होनी चाहिए:inet
: Inet सॉकेट
manifest.hal.transport.ip
औरmanifest.hal.transport.port
का इस्तेमाल करना ज़रूरी है.manifest.hal.transport.arch
passthrough
के लिए ज़रूरी है औरhwbinder
के लिए मौजूद नहीं होना चाहिए. इससे, दी जा रही पासथ्रू सेवा के बिट रेट के बारे में पता चलता है. वैल्यू इनमें से कोई एक हो सकती है:32
: 32-बिट मोड64
: 64-बिट मोड32+64
: दोनों
manifest.hal.transport.ip
inet
के लिए ज़रूरी है. अगरinet
नहीं है, तो इसकी वैल्यू नहीं होनी चाहिए. उस आईपी पते के बारे में बताता है जिससे रिमोट इंटरफ़ेस को दिखाया जा रहा है.manifest.hal.transport.port
inet
के लिए ज़रूरी है. अगरinet
नहीं है, तो इसकी वैल्यू नहीं होनी चाहिए. उस पोर्ट के बारे में बताता है जिससे रिमोट इंटरफ़ेस को दिखाया जा रहा है.manifest.hal.version
- ज़रूरी नहीं, दोहराया जा सकता है. मेनिफ़ेस्ट में
hal
टैग का वर्शन.
HIDL और नेटिव एचएएल के लिए, फ़ॉर्मैटMAJOR.MINOR
है. उदाहरण के लिए,hardware/interfaces
,vendor/${VENDOR}/interfaces
,frameworks/hardware/interfaces
याsystem/hardware/interfaces
देखें.
HIDL और नेटिव एचएएल, कई वर्शन फ़ील्ड का इस्तेमाल तब तक कर सकते हैं, जब तक वे अलग-अलग मुख्य वर्शन दिखाते हैं. साथ ही, हर मुख्य वर्शन के लिए सिर्फ़ एक मामूली वर्शन दिया जाता है. उदाहरण के लिए, 3.1 और 3.2 एक साथ काम नहीं कर सकते, लेकिन 1.0 और 3.4 एक साथ काम कर सकते हैं. यह एक ही नाम वाले सभीhal
एलिमेंट पर लागू होता है, बशर्ते किoverride="true"
न हो.<version>
की वैल्यू,<fqname>
से नहीं जुड़ी होतीं, क्योंकि<fqname>
में एक वर्शन होता है.
एआईडीएल एचएएल के लिए, Android 11 और उससे पहले के वर्शन पर<version>
मौजूद नहीं होना चाहिए. Android 12 और उसके बाद के वर्शन वाले डिवाइसों पर,<version>
एक पूर्णांक होना चाहिए. हर(package, interface, instance)
ट्यूपल के लिए, ज़्यादा से ज़्यादा एक<version>
होना चाहिए. अगर यह मौजूद नहीं है, तो डिफ़ॉल्ट रूप से1
का इस्तेमाल किया जाएगा.<version>
की वैल्यू, एक ही<hal>
में मौजूद सभी<fqname>
से जुड़ी होती है, क्योंकि<fqname>
में कोई वर्शन नहीं होता. manifest.hal.interface
- ज़रूरी है. डुप्लीकेट के बिना दोहराया जा सकता है. पैकेज में ऐसा इंटरफ़ेस बताएं जिसमें इंस्टेंस का नाम हो.
<hal>
में कई<interface>
एलिमेंट हो सकते हैं. हालांकि, उनके नाम अलग-अलग होने चाहिए. manifest.hal.interface.name
- ज़रूरी है. इंटरफ़ेस का नाम.
manifest.hal.interface.instance
- ज़रूरी है, दोहराया जा सकता है. इंटरफ़ेस का इंस्टेंस नाम. किसी इंटरफ़ेस के लिए कई उदाहरण हो सकते हैं, लेकिन डुप्लीकेट
<instance>
एलिमेंट नहीं हो सकते.
manifest.hal.fqname
- ज़रूरी नहीं, दोहराया जा सकता है.
manifest.hal.name
नाम वाले HAL के लिए, इंस्टेंस तय करने का दूसरा तरीका.- HIDL HAL के लिए, फ़ॉर्मैट
@MAJOR.MINOR::INTERFACE/INSTANCE
है. - AIDL HAL के लिए, फ़ॉर्मैट
INTERFACE/INSTANCE
है.
- HIDL HAL के लिए, फ़ॉर्मैट
manifest.sepolicy
- ज़रूरी है. इसमें sepolicy से जुड़ी सभी एंट्री शामिल होती हैं.
manifest.sepolicy.version
- डिवाइस मेनिफ़ेस्ट के लिए ज़रूरी है. SELinux वर्शन की जानकारी देता है. इसका
SDK_INT.PLAT_INT
फ़ॉर्मैट है. manifest.vendor-ndk
- ज़रूरी है, दोहराया जा सकता है; फ़्रेमवर्क मेनिफ़ेस्ट के लिए ज़रूरी है. डिवाइस मेनिफ़ेस्ट में मौजूद नहीं होना चाहिए. एक से ज़्यादा
<vendor-ndk>
एंट्री में अलग-अलग<version>
होने चाहिए. फ़्रेमवर्क से मिले VNDK स्नैपशॉट के सेट के बारे में बताता है. manifest.vendor-ndk.version
- ज़रूरी है. यह एक पॉज़िटिव इंटिजर है, जो VNDK स्नैपशॉट के वर्शन को दिखाता है.
manifest.vendor-ndk.library
- ज़रूरी नहीं, डुप्लीकेट के बिना दोहराया जा सकता है. इस VNDK वेंडर स्नैपशॉट के लिए, फ़्रेमवर्क की ओर से उपलब्ध कराई गई VNDK लाइब्रेरी के सेट के बारे में बताता है. वैल्यू, किसी लाइब्रेरी का फ़ाइल नाम होती है. जैसे,
libjpeg.so
, जिसमें प्रीफ़िक्सlib
और सफ़िक्स.so
शामिल होता है. पाथ कॉम्पोनेंट इस्तेमाल करने की अनुमति नहीं है. manifest.system-sdk.version
- ज़रूरी नहीं, डुप्लीकेट के बिना दोहराया जा सकता है; इसका इस्तेमाल सिर्फ़ फ़्रेमवर्क के मेनिफ़ेस्ट में किया जाता है. इससे, वेंडर ऐप्लिकेशन के लिए, फ़्रेमवर्क से उपलब्ध कराए गए सिस्टम SDK टूल के वर्शन के सेट के बारे में पता चलता है.
manifest.kernel
- ज़रूरी नहीं. इसमें, कर्नेल के बारे में स्टैटिक जानकारी दी जाती है.
manifest.kernel.target-level
- ज़रूरी नहीं. इस फ़ील्ड में, कर्नेल की शाखा के बारे में जानकारी होती है. अगर यह मौजूद नहीं है, तो इसकी वैल्यू डिफ़ॉल्ट रूप से
manifest.target-level
पर सेट होती है. यह वैल्यूmanifest.target-level
से ज़्यादा या इसके बराबर होनी चाहिए. ज़्यादा जानकारी के लिए, कर्नल मैच के नियम देखें.