ไฟล์ Manifest

ออบเจ็กต์ VINTF รวบรวมข้อมูลจากอุปกรณ์ ไฟล์ Manifest และไฟล์ Manifest ของเฟรมเวิร์ก (XML) ทั้ง 2 อย่าง ไฟล์ Manifest จะใช้รูปแบบเดียวกัน แต่องค์ประกอบบางอย่างอาจใช้ไม่ได้กับทั้ง 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 กับ ODM ที่ไม่บังคับ ไฟล์ Manifest
    3. /vendor/manifest.xml (เดิม ไม่มีส่วนย่อย)
    4. สุดท้าย ให้รวมส่วนย่อยของไฟล์ Manifest จาก APEX ของผู้ให้บริการทั้งหมด

    โปรดทราบว่า

    • ในอุปกรณ์เดิม ระบบจะใช้ไฟล์ 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 ของระบบ

โดยใช้ไฟล์ Fragment หลายไฟล์ได้เช่นเดียวกับไฟล์ 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 ไปยังโมดูลใดก็ได้ เช่น คุณสามารถแก้ไข ด้วยการนำ 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 ของผู้ให้บริการ สร้างแพ็กเกจ Fragment ของ 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" ต้องไม่เป็น หรือไม่เช่นนั้น ระบุว่าใช้การขนส่งใดเมื่ออินเทอร์เฟซมาจาก ระบบจะค้นหาแพ็กเกจนี้จาก Service Manager ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
  • hwbinder: โหมดรวม
  • passthrough: โหมดส่งผ่าน
ไม่บังคับเมื่อ manifest.hal.format == "aidl" ต้องไม่เป็น หรือไม่เช่นนั้น ระบุการขนส่งที่ใช้เมื่อมีการแสดงอินเทอร์เฟซ จากระยะไกล ค่าต้องมีลักษณะดังนี้
  • inet: ซ็อกเก็ต Inet
manifest.hal.transport.ip และ manifest.hal.transport.port เพื่อระบุข้อมูลการเชื่อมต่อ Inet เพิ่มเติม
manifest.hal.transport.arch
ต้องระบุสำหรับ passthrough และต้องแสดงเป็นเวลา hwbinder อธิบายความเป็นบิตของบริการส่งผ่าน (Pass Through) ที่ถูก ที่มีให้ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
  • 32: โหมด 32 บิต
  • 64: โหมด 64 บิต
  • 32+64: ทั้งคู่
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 เนทีฟอาจใช้ช่องเวอร์ชันหลายช่องตราบใดที่ช่องเหล่านั้นแสดง เวอร์ชันหลักที่แตกต่างกัน โดยมีเวอร์ชันย่อยเพียง 1 เวอร์ชันต่อเวอร์ชันหลัก เวอร์ชันที่ให้ไว้ ตัวอย่างเช่น 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) Tuple หากไม่มี ให้ใช้ค่าเริ่มต้นเป็น 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
  • สำหรับ HIDL HAL รูปแบบคือ @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
ไม่บังคับ อธิบาย Branch ของเคอร์เนล ค่าเริ่มต้นคือ manifest.target-level หากไม่มี ต้องมากกว่า หรือเท่ากับ manifest.target-level โปรดดู กฎการจับคู่เคอร์เนล เพื่อดูรายละเอียด