ออบเจ็กต์ VINTF จะรวบรวมข้อมูลจากไฟล์ device manifest และ framework manifest (XML) ไฟล์ Manifest ทั้ง 2 ประเภทใช้รูปแบบเดียวกัน แต่องค์ประกอบบางรายการใช้กับทั้ง 2 ประเภทไม่ได้ (ดูรายละเอียดเกี่ยวกับสคีมาในสคีมาไฟล์ Manifest)
ไฟล์ Manifest ของอุปกรณ์
ไฟล์ Manifest ของอุปกรณ์ (จากอุปกรณ์) ประกอบด้วยไฟล์ Manifest ของผู้ให้บริการและไฟล์ Manifest ของ ODM
- ไฟล์ Manifest ของผู้ให้บริการจะระบุ HAL, เวอร์ชันนโยบาย SELinux และอื่นๆ ที่ใช้ร่วมกันใน SoC โดยแนะนำให้วางไฟล์ไว้ในซอร์สทรี Android ที่
device/VENDOR/DEVICE/manifest.xml
แต่จะใช้ไฟล์หลายไฟล์ก็ได้ โปรดดูรายละเอียดที่หัวข้อไฟล์ Manifest และสร้าง DM จากไฟล์ - ไฟล์ Manifest ของ ODM จะแสดง HAL สำหรับผลิตภัณฑ์โดยเฉพาะในพาร์ติชัน ODM
ออบเจ็กต์ VINTF จะโหลดไฟล์ Manifest ของ 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
- หากมีการกําหนด
- ไฟล์ Manifest ของผู้ให้บริการจะแสดง HAL สำหรับผลิตภัณฑ์โดยเฉพาะในพาร์ติชันของผู้ให้บริการ
ออบเจ็กต์ VINTF จะโหลดไฟล์ Manifest ของผู้ให้บริการตามลำดับนี้
- หากมีการกําหนด
SKU
(โดยที่SKU
คือค่าของพร็อพเพอร์ตี้ro.boot.product.vendor.sku
)/vendor/etc/vintf/manifest_SKU.xml
/vendor/etc/vintf/manifest.xml
- หากมีการกําหนด
- ออบเจ็กต์ VINTF จะโหลดไฟล์ Manifest ของอุปกรณ์ตามลำดับนี้
- หากมีไฟล์ Manifest ของผู้ให้บริการ ให้รวมข้อมูลต่อไปนี้
- ไฟล์ Manifest ของผู้ให้บริการ
- ข้อมูลโค้ดไฟล์ Manifest ของผู้ให้บริการที่ไม่บังคับ
- ไฟล์ Manifest ของ ODM (ไม่บังคับ)
- ข้อมูลโค้ดไฟล์ Manifest ของ ODM ที่ไม่บังคับ
- หรือหากมีไฟล์ Manifest ของ ODM ให้รวมไฟล์ Manifest ของ ODM เข้ากับเศษส่วนของไฟล์ Manifest ของ ODM (ไม่บังคับ)
/vendor/manifest.xml
(เดิม ไม่มีข้อมูลโค้ด)- สุดท้าย ให้รวมกลุ่มรายการ Manifest จาก APEX ของผู้ให้บริการรายใดก็ได้ ระบบจะโหลดเศษส่วนของไฟล์ Manifest จากไดเรกทอรี
etc/vintf
ของ APEX แต่ละรายการ (เช่น/apex/<apex name>/etc/vintf
)
โปรดทราบว่า
- ในอุปกรณ์เดิม ระบบจะใช้ไฟล์ Manifest ของผู้ให้บริการเดิมและไฟล์ Manifest ของ ODM ไฟล์ Manifest ของ ODM อาจลบล้างไฟล์ Manifest ของผู้ให้บริการเดิมโดยสมบูรณ์
- ในอุปกรณ์ที่เปิดตัวด้วย Android 9 ระบบจะรวมไฟล์ Manifest ของ ODM เข้ากับไฟล์ Manifest ของผู้ให้บริการ
- เมื่อรวมรายการไฟล์ Manifest ไฟล์ Manifest ที่ปรากฏในรายการภายหลังอาจลบล้างแท็กในไฟล์ Manifest ที่ปรากฏในรายการก่อนหน้านี้ ในกรณีที่แท็กในไฟล์ Manifest ที่ปรากฏในรายการภายหลังมีแอตทริบิวต์
override="true"
เช่น ไฟล์ Manifest ของ ODM อาจลบล้างแท็ก<hal>
บางรายการจากไฟล์ Manifest ของผู้ให้บริการ ดูเอกสารประกอบสำหรับแอตทริบิวต์override
ด้านล่าง
- หากมีไฟล์ Manifest ของผู้ให้บริการ ให้รวมข้อมูลต่อไปนี้
การตั้งค่านี้ช่วยให้ผลิตภัณฑ์หลายรายการที่มีบอร์ดเดียวกันใช้รูปภาพเดียวกันของผู้ให้บริการ (ซึ่งให้ HAL ทั่วไป) แต่มีรูปภาพ ODM ที่แตกต่างกัน (ซึ่งระบุ HAL ที่เจาะจงผลิตภัณฑ์) ได้
ตัวอย่างไฟล์ Manifest ของผู้ให้บริการมีดังนี้
<?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>
ตัวอย่างไฟล์ Manifest ของ ODM
<?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 o<verride="t<rue"> < name>android.<hardware.ca<mera/name> < transport>hwbind<er/transport> < version>3.5</version> < interface> < name&<gt;ICamera<Provider/name> instance>l<egacy/0/instance> </interface> /hal&g<t; !-- NFC <is declared to be <disabled --> < hal ov<erride="<true"> name<>android.har<dware.nfc/name>< transport&g<t;hwbinder/<transport> </hal> hal> < name&<gt;android.hardware<.power/name> < transport&g<t;hwbinder/trans<port&g<t; version>1.1/version> interface> name>IPower/name> instance>default/instance> /interface> /hal> /manifest>
ต่อไปนี้คือตัวอย่างไฟล์ Manifest ของอุปกรณ์ในแพ็กเกจ OTA
<?xml version="1.0" encoding=<"UTF-8"?> !-- Comments, Legal <notices, etc. here --> manifest version="1.0" <type="device" t<arget-level="1"> <!-- hals ommited --&<gt; kernel ver<sion="4.4.176<"&<gt; conf<ig> < key>CONFIG_ANDR<OID/key> < value>y</value&<gt; /con<fig> < config> key>C<ONFIG_ARM<64/key> value>y/value> /config> !-- other configs ommited --> /kernel> /manifest>
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการพัฒนาไฟล์ Manifest ของอุปกรณ์
ไฟล์ Manifest ของเฟรมเวิร์ก
ไฟล์ Manifest ของเฟรมเวิร์กประกอบด้วยไฟล์ Manifest ของระบบ ไฟล์ Manifest ของผลิตภัณฑ์ และไฟล์ Manifest ของ system_ext
-
ไฟล์ Manifest ของระบบ (ซึ่ง Google มีให้) สร้างขึ้นด้วยตนเองและอยู่ในซอร์สทรีของ Android ที่
/system/libhidl/manifest.xml
- ไฟล์ Manifest ของผลิตภัณฑ์ (ที่อุปกรณ์ระบุ) จะแสดง HAL ที่ให้บริการโดยโมดูลที่ติดตั้งในพาร์ติชันผลิตภัณฑ์
-
ไฟล์ Manifest ของ system_ext (จากอุปกรณ์) จะแสดงรายการต่อไปนี้
- HAL ที่ให้บริการโดยโมดูลที่ติดตั้งในพาร์ติชัน system_ext
- เวอร์ชัน VNDK
- เวอร์ชัน SDK ของระบบ
คุณใช้ไฟล์แฟรกเมนต์ได้หลายไฟล์เช่นเดียวกับไฟล์ Manifest ของอุปกรณ์ โปรดดูรายละเอียดที่หัวข้อเศษส่วนของไฟล์ Manifest
ต่อไปนี้คือตัวอย่างไฟล์ Manifest ของเฟรมเวิร์ก
<?xml version="1.0" encoding=<"UTF-8"?> !-- Comments, Legal <notices, etc. here --> manifest version=&q<uot;1.0"< type="framework"<> hal><; name><android.hidl.allocat<or/name>< transport<>hwbinder/transport&<gt; ver<sion>1.0/version<> in<terface> < name>IAl<locator/na<me> < instance>ashmem</instance> < /interface> /hal>< hal> < name>an<droid.hidl.memory/<name> transp<ort arch=&qu<ot;32+64">p<assthrough/tran<sport> v<ersion>1.0/ve<rsion> < inter<face> name<>IMapper/nam<e> <instance>ashmem/i<nstance>< /interfac<e> /hal> <hal> name<>android.hidl.ma<nager/name> < transport><;hwbinder/transp<ort> < version<>1.0/version> interface<> < name>IService<Manager/name> < in<stance>default/<instance> /i<nterface> /h<al> hal> < name><android.frameworks.<sensorservice/na<me> < transport>hwbinder/<transport> version>1.0/ver<sion> < interface> < name>IS<ensorManage<r/name> < instance>defaul<t/instance> /inter<face> /hal&g<t; hal max-l<evel="5"&<gt; name<>androi<d.frameworks.schedul<erservice/<name> < transport>h<wbinder/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>
ข้อมูลโค้ดในไฟล์ Manifest
ใน Android 10 ขึ้นไป คุณสามารถเชื่อมโยงรายการไฟล์ Manifest กับโมดูล HAL ในระบบการสร้างได้ ซึ่งจะช่วยให้รวมโมดูล HAL ไว้ในระบบการบิลด์แบบมีเงื่อนไขได้ง่ายขึ้น
ตัวอย่าง
ในไฟล์ Android.bp
หรือ Android.mk
ให้เพิ่ม vintf_fragments
ลงในโมดูลที่ติดตั้งในอุปกรณ์อย่างชัดเจน เช่น cc_binary
หรือ rust_binary
เช่น คุณสามารถแก้ไขโมดูลด้วยการติดตั้งใช้งาน HAL (my.package.foo@1.0-service-bar
)
... { ... vintf_fragments: ["manifest_foo.xml"], ... }
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
ในไฟล์ชื่อ manifest_foo.xml
ให้สร้างไฟล์ Manifest สำหรับข้อบังคับนี้ ระบบจะเพิ่มไฟล์ Manifest นี้ลงในอุปกรณ์เมื่อถึงเวลาสร้าง การเพิ่มรายการที่นี่เหมือนกับการเพิ่มรายการในไฟล์ Manifest หลักของอุปกรณ์
ซึ่งจะช่วยให้ไคลเอ็นต์ใช้อินเทอร์เฟซได้ และช่วยให้ VTS ระบุได้ว่ามีการติดตั้งใช้งาน HAL ใดในอุปกรณ์ ไฟล์ Manifest นี้ทําทุกอย่างที่ไฟล์ Manifest ปกติทําได้
ตัวอย่างด้านล่างใช้ android.hardware.foo@1.0::IFoo/default
ซึ่งติดตั้งไว้ในพาร์ติชัน vendor
หรือ odm
หากติดตั้งลงในพาร์ติชัน system
, product
หรือ system_ext
ให้ใช้ประเภท framework
แทนประเภท device
<manifest version="1.0" type=&quo<t;device"> hal <format="hidl"&g<t; name<>android.hardwa<re.foo/name> < transport>hwbinder</transport><; < fqname>@1.0::IFoo/default/fqname> /hal> /manifest>
หากแพ็กเกจโมดูล HAL ใน APEX ของผู้ให้บริการ ให้แพ็กเกจเศษ VINTF ที่เชื่อมโยงภายใน APEX เดียวกันด้วย prebuilt_etc
ตามที่อธิบายไว้ในเศษ VINTF
สคีมาไฟล์ Manifest
ส่วนนี้จะอธิบายความหมายของแท็ก XML เหล่านี้ แท็ก "ต้องระบุ" บางรายการอาจไม่อยู่ในไฟล์ต้นฉบับในซอร์สทรีของ Android และเขียนโดย assemble_vintf
ในเวลาที่สร้าง แท็กที่ต้องระบุต้องอยู่ในไฟล์ที่เกี่ยวข้องบนอุปกรณ์
?xml
- ไม่บังคับ ให้ข้อมูลแก่โปรแกรมแยกวิเคราะห์ XML เท่านั้น
manifest.version
- ต้องระบุ เวอร์ชันเมตาของไฟล์ Manifest นี้ อธิบายองค์ประกอบที่คาดหวังในไฟล์ Manifest ไม่เกี่ยวข้องกับเวอร์ชัน XML
manifest.type
- ต้องระบุ ประเภทของไฟล์ Manifest นี้ โดยจะมีค่าเป็น
device
สำหรับไฟล์ Manifest ของอุปกรณ์และframework
สำหรับไฟล์ Manifest ของเฟรมเวิร์ก manifest.target-level
- ต้องระบุสำหรับไฟล์ Manifest ของอุปกรณ์ ระบุเวอร์ชันเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์ก (FCM) ที่ไฟล์ Manifest ของอุปกรณ์นี้กำหนดเป้าหมายให้ใช้งานร่วมกันได้ ข้อมูลนี้เรียกอีกอย่างว่าเวอร์ชัน FCM ที่จัดส่งของอุปกรณ์
manifest.hal
- ไม่บังคับ ซ้ำได้ HAL รายการเดียว (HIDL หรือเนทีฟ เช่น GL) ขึ้นอยู่กับแอตทริบิวต์
format
manifest.hal.format
- ไม่บังคับ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
hidl
: HIDL HAL ซึ่งเป็นค่าเริ่มต้นaidl
: AIDL HAL ใช้ได้เฉพาะกับเมตาเวอร์ชันของไฟล์ Manifest 2.0 ขึ้นไปnative
: HAL เดิม
manifest.hal.max-level
- ไม่บังคับ ใช้ได้กับไฟล์ Manifest ของเฟรมเวิร์กเท่านั้น หากตั้งค่าไว้ ระบบจะปิดใช้ HAL ที่มีระดับสูงสุดต่ำกว่าเวอร์ชัน FCM เป้าหมายในไฟล์ Manifest ของเฟรมเวิร์ก
manifest.hal.override
- ไม่บังคับ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
true
: ลบล้างองค์ประกอบ<hal>
อื่นๆ ที่มี<name>
และเวอร์ชันหลักเดียวกัน หากไม่มี<version>
หรือ<fqname>
ในองค์ประกอบ<hal>
นี้ แสดงว่าองค์ประกอบ<hal>
ประกาศว่า HAL นี้ปิดอยู่false
: อย่าลบล้างองค์ประกอบ<hal>
อื่นๆ ที่มี<name>
และเวอร์ชันหลักเดียวกัน
manifest.hal.name
- ต้องระบุ ชื่อแพ็กเกจที่สมบูรณ์ในตัวเองของ HAL รายการ HAL หลายรายการสามารถใช้ชื่อเดียวกันได้ ตัวอย่าง
android.hardware.camera
(HIDL หรือ AIDL HAL)GLES
(HAL เดิม ต้องใช้ชื่อเท่านั้น)
manifest.hal.transport
- ต้องระบุเมื่อ
manifest.hal.format == "hidl"
ต้องไม่ปรากฏ ระบุการขนส่งที่ใช้เมื่อมีการค้นหาอินเทอร์เฟซจากแพ็กเกจนี้จากเครื่องมือจัดการบริการ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้hwbinder
: โหมด Binderizedpassthrough
: โหมดส่งผ่าน
- ไม่บังคับเมื่อ
manifest.hal.format == "aidl"
ต้องไม่ปรากฏ ระบุการขนส่งที่ใช้เมื่อแสดงอินเทอร์เฟซจากระยะไกล ค่าต้องเป็นค่าต่อไปนี้inet
: ซ็อกเก็ต Inet
manifest.hal.transport.ip
และmanifest.hal.transport.port
เพื่อระบุข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อ Inet manifest.hal.transport.arch
- ต้องระบุสำหรับ
passthrough
และไม่ต้องระบุสำหรับhwbinder
อธิบายจำนวนบิตของบริการการส่งผ่านที่ให้บริการ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้32
: โหมด 32 บิต64
: โหมด 64 บิต32+64
: ทั้ง 2 อย่าง
manifest.hal.transport.ip
- ต้องระบุสำหรับ
inet
และจะต้องไม่ระบุหากไม่ใช่กรณีดังกล่าว อธิบายที่อยู่ IP ที่แสดงอินเทอร์เฟซระยะไกล manifest.hal.transport.port
- ต้องระบุสำหรับ
inet
และจะต้องไม่ระบุหากไม่ใช่กรณีดังกล่าว อธิบายพอร์ตที่ให้บริการอินเทอร์เฟซระยะไกล manifest.hal.version
- ไม่บังคับ ซ้ำได้ เวอร์ชันสำหรับแท็ก
hal
ในไฟล์ Manifest
สำหรับ HIDL และ HAL เดิม รูปแบบจะเป็นMAJOR.MINOR
โปรดดูตัวอย่างที่hardware/interfaces
,vendor/${VENDOR}/interfaces
,frameworks/hardware/interfaces
หรือsystem/hardware/interfaces
HIDL และ HAL เดิมอาจใช้ช่องเวอร์ชันหลายช่อง ตราบใดที่แสดงถึงเวอร์ชันหลักที่แตกต่างกัน โดยมีเวอร์ชันย่อยเพียงเวอร์ชันเดียวต่อเวอร์ชันหลัก เช่น 3.1 และ 3.2 ไม่สามารถอยู่ร่วมกันได้ แต่ 1.0 และ 3.4 อยู่ร่วมกันได้ ซึ่งมีผลกับองค์ประกอบhal
ทั้งหมดที่มีชื่อเดียวกัน เว้นแต่ว่าoverride="true"
ค่าของ<version>
ไม่ได้เชื่อมโยงกับ<fqname>
เนื่องจาก<fqname>
มีเวอร์ชัน
สำหรับ AIDL HAL<version>
ต้องไม่อยู่ในอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า<version>
ต้องเป็นจำนวนเต็มค่าเดียวในอุปกรณ์ที่ใช้ Android 12 ขึ้นไป ต้องมี<version>
ไม่เกิน 1 รายการสําหรับ(package, interface, instance)
แต่ละรายการ หากไม่ระบุ ระบบจะใช้1
เป็นค่าเริ่มต้น ค่าของ<version>
จะเชื่อมโยงกับ<fqname>
ทั้งหมดใน<hal>
เดียวกันเนื่องจาก<fqname>
ไม่มีเวอร์ชัน manifest.hal.interface
- ต้องระบุ ซ้ำได้โดยไม่ซ้ำกัน ระบุอินเทอร์เฟซในแพ็กเกจที่มีชื่ออินสแตนซ์
<interface>
หลายรายการใน<hal>
ได้ แต่ชื่อต้องไม่ซ้ำกัน manifest.hal.interface.name
- ต้องระบุ ชื่ออินเทอร์เฟซ
manifest.hal.interface.instance
- ต้องระบุ ซ้ำได้ ชื่ออินสแตนซ์ของอินเทอร์เฟซ อินเทอร์เฟซหนึ่งๆ อาจมีอินสแตนซ์หลายรายการได้ แต่ต้องไม่มี
<instance>
องค์ประกอบ ที่ซ้ำกัน
manifest.hal.fqname
- ไม่บังคับ ซ้ำได้ วิธีอื่นในการระบุอินสแตนซ์สำหรับ HAL ที่มีชื่อ
manifest.hal.name
- สำหรับ HAL ของ HIDL รูปแบบจะเป็น
@MAJOR.MINOR::INTERFACE/INSTANCE
- สำหรับ AIDL HAL รูปแบบจะเป็น
INTERFACE/INSTANCE
- สำหรับ HAL ของ HIDL รูปแบบจะเป็น
manifest.sepolicy
- ต้องระบุ มีรายการที่เกี่ยวข้องกับ sepolicy ทั้งหมด
manifest.sepolicy.version
- ต้องระบุสำหรับไฟล์ Manifest ของอุปกรณ์ ประกาศเวอร์ชัน SELinux โดยจะมีรูปแบบเป็น
SDK_INT.PLAT_INT
manifest.vendor-ndk
- ต้องระบุ ซ้ำได้ จำเป็นสำหรับไฟล์ Manifest ของเฟรมเวิร์ก ต้องไม่มีค่านี้อยู่ในไฟล์ Manifest ของอุปกรณ์ รายการ
<vendor-ndk>
หลายรายการต้องมี<version>
ที่แตกต่างกัน อธิบายชุดภาพรวม VNDK ที่เฟรมเวิร์กมีให้ manifest.vendor-ndk.version
- ต้องระบุ ตัวเลขนี้เป็นจำนวนเต็มที่เป็นบวกซึ่งแสดงเวอร์ชันของภาพรวม VNDK
manifest.vendor-ndk.library
- ไม่บังคับ ซ้ำได้ แต่ไม่ซ้ำกัน อธิบายชุดไลบรารี VNDK ที่เฟรมเวิร์กจัดหาให้สำหรับสแนปชอตของผู้ให้บริการ VNDK นี้ ค่าคือชื่อไฟล์ของไลบรารี เช่น
libjpeg.so
ซึ่งรวมถึงคำนำหน้าlib
และคำต่อท้าย.so
ไม่อนุญาตให้ใช้คอมโพเนนต์เส้นทาง manifest.system-sdk.version
- ไม่บังคับ ซ้ำได้ ซ้ำกันไม่ได้ ใช้โดยไฟล์ Manifest ของเฟรมเวิร์กเท่านั้น อธิบายชุดเวอร์ชัน SDK ของระบบที่เฟรมเวิร์กจัดเตรียมไว้ให้แอปของผู้ให้บริการ
manifest.kernel
- ไม่บังคับ อธิบายข้อมูลแบบคงที่เกี่ยวกับเคอร์เนล
manifest.kernel.target-level
- ไม่บังคับ อธิบายสาขาเคอร์เนล ค่าเริ่มต้นของฟิลด์นี้คือ
manifest.target-level
หากไม่มี ต้องมากกว่าหรือเท่ากับmanifest.target-level
ดูรายละเอียดได้ที่กฎการจับคู่เคอร์เนล