ไฟล์ Manifest

ออบเจ็กต์ 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 ตามลำดับนี้
    1. หากมีการกําหนด SKU (โดยที่ SKU คือค่าของพร็อพเพอร์ตี้ ro.boot.product.hardware.sku) /odm/etc/vintf/manifest_SKU.xml
    2. /odm/etc/vintf/manifest.xml
    3. หากกำหนด SKU ไว้ /odm/etc/manifest_SKU.xml
    4. /odm/etc/manifest.xml
  • ไฟล์ Manifest ของผู้ให้บริการจะแสดง HAL สำหรับผลิตภัณฑ์โดยเฉพาะในพาร์ติชันของผู้ให้บริการ ออบเจ็กต์ VINTF จะโหลดไฟล์ Manifest ของผู้ให้บริการตามลำดับนี้
    1. หากมีการกําหนด SKU (โดยที่ SKU คือค่าของพร็อพเพอร์ตี้ ro.boot.product.vendor.sku) /vendor/etc/vintf/manifest_SKU.xml
    2. /vendor/etc/vintf/manifest.xml
  • ออบเจ็กต์ VINTF จะโหลดไฟล์ Manifest ของอุปกรณ์ตามลำดับนี้
    1. หากมีไฟล์ Manifest ของผู้ให้บริการ ให้รวมข้อมูลต่อไปนี้
      1. ไฟล์ Manifest ของผู้ให้บริการ
      2. ข้อมูลโค้ดไฟล์ Manifest ของผู้ให้บริการที่ไม่บังคับ
      3. ไฟล์ Manifest ของ ODM (ไม่บังคับ)
      4. ข้อมูลโค้ดไฟล์ Manifest ของ ODM ที่ไม่บังคับ
    2. หรือหากมีไฟล์ Manifest ของ ODM ให้รวมไฟล์ Manifest ของ ODM เข้ากับเศษส่วนของไฟล์ Manifest ของ ODM (ไม่บังคับ)
    3. /vendor/manifest.xml (เดิม ไม่มีข้อมูลโค้ด)
    4. สุดท้าย ให้รวมกลุ่มรายการ 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 ด้านล่าง

การตั้งค่านี้ช่วยให้ผลิตภัณฑ์หลายรายการที่มีบอร์ดเดียวกันใช้รูปภาพเดียวกันของผู้ให้บริการ (ซึ่งให้ 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 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>

ต่อไปนี้คือตัวอย่างไฟล์ Manifest ของอุปกรณ์ในแพ็กเกจ OTA

<?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>

โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการพัฒนาไฟล์ 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="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>

ข้อมูลโค้ดในไฟล์ 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="device">
    <hal format="hidl">
        <name>android.hardware.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: โหมด Binderized
  • passthrough: โหมดส่งผ่าน
ไม่บังคับเมื่อ 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
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 ดูรายละเอียดได้ที่กฎการจับคู่เคอร์เนล