เมทริกซ์ความเข้ากันได้

ส่วนนี้จะอธิบายเฟรมเวิร์กและตารางความเข้ากันได้ของอุปกรณ์ รวมถึงสคีมาตารางความเข้ากันได้ ดูกฎการจับคู่สำหรับกฎการจับคู่

เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์ก (FCM)

ตารางความเข้ากันได้ของเฟรมเวิร์ก (FCM) จะอธิบายข้อกำหนดของเฟรมเวิร์กในอุปกรณ์ที่ใช้งาน เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กประกอบด้วยเมทริกซ์ความเข้ากันได้ของระบบ เมทริกซ์ความเข้ากันได้ของผลิตภัณฑ์ และเมทริกซ์ความเข้ากันได้ของ system_ext ไฟล์ Manifest ของอุปกรณ์ต้องเป็นไปตามข้อกําหนดของ FCM (ข้อกําหนดมีผลบังคับใช้ ณ เวลาที่สร้าง รันไทม์ และใน VTS)

FCM ของ system_ext และ FCM ของผลิตภัณฑ์เป็นส่วนเสริมของ FCM สำหรับอุปกรณ์โดยเฉพาะ (ติดตั้งในพาร์ติชันระบบ)

  • FCM ของอุปกรณ์ควรเป็นไปตามข้อกำหนดของโมดูลในพาร์ติชันระบบ
  • FCM ของ system_ext ควรแสดงถึงข้อกำหนดตามโมดูลในพาร์ติชัน system_ext
  • FCM ของผลิตภัณฑ์ควรแสดงถึงข้อกำหนดตามโมดูลในพาร์ติชันผลิตภัณฑ์

FCM ทั้งหมดควรสอดคล้องกับการแก้ไขเฟรมเวิร์กของ OEM ในพาร์ติชัน system, product และ system_ext ตัวอย่างเช่น หากแอปที่ติดตั้งในพาร์ติชันผลิตภัณฑ์ใช้ส่วนขยายของผู้ให้บริการสำหรับอินเทอร์เฟซ HAL คุณควรประกาศข้อกำหนดของอินเทอร์เฟซ 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 ของผลิตภัณฑ์เข้ากับ FCM ในส่วนแบ่งพาร์ติชัน system และ system_ext ขณะรันไทม์

ตัวอย่างไฟล์ 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

FCM ของ system_ext คือไฟล์ตารางเมตริกความเข้ากันได้ของเฟรมเวิร์กในพาร์ติชัน system_ext ออบเจ็กต์ VINTF จะรวม FCM ของ system_ext เข้ากับ FCM ในระบบและพาร์ติชันผลิตภัณฑ์ขณะรันไทม์ ดูตัวอย่างไฟล์ FCM ของ system_ext ได้ที่เมทริกซ์ความเข้ากันได้ของผลิตภัณฑ์

เมทริกซ์ความเข้ากันได้ของอุปกรณ์ (DCM)

ตารางความเข้ากันได้ของอุปกรณ์จะอธิบายชุดข้อกำหนดที่อุปกรณ์คาดหวังจากเฟรมเวิร์ก (ข้อกำหนดที่บังคับใช้เมื่อเปิดตัวและเวลา OTA)

ตัวอย่างไฟล์ 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>

สคีมาเมทริกซ์ความเข้ากันได้

ส่วนนี้จะอธิบายความหมายของแท็ก XML เหล่านี้ แท็ก "ต้องระบุ" บางรายการอาจไม่อยู่ในไฟล์ต้นฉบับในซอร์สทรีของ Android และเขียนโดย assemble_vintf ในเวลาที่สร้าง แท็ก "ต้องระบุ" ต้องอยู่ในไฟล์ที่เกี่ยวข้องบนอุปกรณ์

?xml
ไม่บังคับ แต่จะแสดงข้อมูลต่อโปรแกรมแยกวิเคราะห์ XML เท่านั้น
compatibility-matrix.version
ต้องระบุ เวอร์ชันเมตาของเมทริกซ์ความเข้ากันได้นี้ อธิบายองค์ประกอบที่คาดไว้ในเมทริกซ์ความเข้ากันได้ ไม่เกี่ยวข้องกับเวอร์ชัน XML
compatibility-matrix.type
ต้องระบุ ประเภทของตารางความเข้ากันได้นี้
  • "device": เมทริกซ์ความเข้ากันได้ของอุปกรณ์
  • "framework": เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์ก
manifest.level
ต้องระบุสำหรับตารางความเข้ากันได้ของเฟรมเวิร์ก ใน Android 12 ขึ้นไป ระบบจะอนุญาตให้ใช้ไฟล์เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กในพาร์ติชัน product และ system_ext ระบุเวอร์ชันตารางความเข้ากันได้ของเฟรมเวิร์ก (เวอร์ชัน FCM) ของไฟล์นี้ อย่าประกาศข้อมูลนี้ในตารางความเข้ากันได้ของเฟรมเวิร์กสำหรับอุปกรณ์ที่เฉพาะเจาะจง (เช่น DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)
compatibility-matrix.hal
ไม่บังคับและซ้ำได้ แสดงรายการ HAL (HIDL หรือแบบเนทีฟ) รายการเดียวที่เจ้าของเมทริกซ์ความเข้ากันได้ (เฟรมเวิร์กหรืออุปกรณ์) กำหนดให้ต้องมี รายการ HAL จะแยกแยะกันด้วยองค์ประกอบ <name> โดยอาจมีรายการ HAL หลายรายการที่มีชื่อเดียวกัน (แสดงถึงเงื่อนไข "และ")
compatibility-matrix.hal.format
ไม่บังคับ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
  • "hidl": HIDL HAL ซึ่งเป็นค่าเริ่มต้น
  • "aidl": AIDL HAL ใช้ได้กับเมตาเวอร์ชัน 2.0 ของเมทริกซ์ความเข้ากันได้เท่านั้น
  • "native": HAL เดิม
compatibility-matrix.hal.optional (Android 15 หรือต่ำกว่า)
คุณจะระบุแอตทริบิวต์
หรือไม่ก็ได้ โดยค่าเริ่มต้นจะเป็นเท็จ ระบุว่า HAL นี้ไม่บังคับสำหรับเจ้าของเมทริกซ์ความเข้ากันได้ (เฟรมเวิร์กหรืออุปกรณ์) หรือไม่ หากมีการทําเครื่องหมายรายการ <hal> ว่าไม่บังคับ หมายความว่าเจ้าของสามารถทํางานกับ HAL นี้ได้ (หากมี) แต่ไม่จำเป็นต้องมี
คำเตือน: ระบบจะเลิกใช้งานแอตทริบิวต์นี้หลังจาก Android 15 และจะไม่มีผลอีกต่อไป หากจำเป็นต้องติดตั้ง HAL ก็ควรบังคับใช้ข้อกำหนดนี้ในการทดสอบ
compatibility-matrix.hal.name
ต้องระบุ ชื่อแพ็กเกจแบบเต็มของ HAL นี้ ตัวอย่าง
  • android.hardware.camera (HIDL หรือ AIDL HAL)
  • GLES (HAL เดิม ต้องใช้ชื่อเท่านั้น)
compatibility-matrix.hal.version
รายการช่วงเวอร์ชัน (ดูการจับคู่ HAL) ซึ่งกำหนดเวอร์ชันที่เจ้าของเมทริกซ์ความเข้ากันได้ (เฟรมเวิร์กหรืออุปกรณ์) คาดหวัง

สำหรับ HIDL และ HAL เดิม ต้องระบุ ซ้ำได้โดยไม่ซ้ำกัน รูปแบบเป็นรูปแบบใดรูปแบบหนึ่งต่อไปนี้
  • 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
ไม่บังคับ ซ้ำได้ รายการอินเทอร์เฟซที่จำเป็นของ HAL นี้
compatibility-matrix.hal.interface.name
ต้องระบุ ชื่ออินเทอร์เฟซ
compatibility-matrix.hal.interface.instance
ไม่บังคับ ซ้ำได้ รายการอินสแตนซ์ที่จำเป็นของอินเทอร์เฟซนี้
compatibility-matrix.hal.interface.regex-instance
ไม่บังคับ ซ้ำได้ รายการรูปแบบชื่ออินสแตนซ์ที่ต้องใช้ในอินเทอร์เฟซนี้ ใช้รูปแบบนิพจน์ทั่วไปแบบขยาย
compatibility-matrix.kernel
ไม่บังคับ ซ้ำได้ ระบุรายการการกําหนดค่าเคอร์เนลที่เฟรมเวิร์กต้องใช้ในแต่ละเวอร์ชันของเคิร์นัล
<kernel> หลายรายการที่มี <version> เดียวกันสามารถมีอยู่ได้เพื่อบ่งบอกความสัมพันธ์ "และ" <kernel> แต่ละรายการคือ "เศษ" ของข้อกําหนดที่เปิดใช้ก็ต่อเมื่อเป็นไปตาม<conditions>
compatibility-matrix.kernel.version
ต้องระบุ เวอร์ชันเคอร์เนล รูปแบบคือ VERSION.MAJOR_REVISION.MINOR_REVISION เวอร์ชันและการแก้ไขที่สำคัญต้องตรงกันทุกประการ การแก้ไขเล็กน้อยจะกำหนดเวอร์ชัน LTS ขั้นต่ำของเคิร์กัลที่เฟรมเวิร์กคาดหวัง
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 ออก โปรดดูรายละเอียดในหน้าข้อมูล strtoull)
  • range รูปแบบคือ [int]-[int] เช่น 10-20 ระบบยอมรับค่าฐาน 16 และต้องขึ้นต้นด้วย 0x หรือ 0X ขอบเขต 2 รายการต้องเป็นจำนวนเต็มแบบไม่ระบุเครื่องหมาย 64 บิต
  • tristate ค่าที่ใช้ได้คือ y, m และ n
compatibility-matrix.kernel.config.value.type
ต้องระบุ ประเภทค่าของรายการ CONFIG ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
ต้องระบุ มีรายการที่เกี่ยวข้องกับ sepolicy ทั้งหมด ใช้โดยเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กเท่านั้น
compatibility-matrix.sepolicy.sepolicy-version
ต้องระบุ ซ้ำได้ อธิบายข้อกำหนดเกี่ยวกับเวอร์ชัน sepolicy สอดคล้องกับ manifest.sepolicy.version อินสแตนซ์แต่ละรายการขององค์ประกอบจะกำหนดช่วงของเวอร์ชัน sepolicy
compatibility-matrix.sepolicy.kernel-sepolicy-version
ต้องระบุ ประกาศpolicydbเวอร์ชันที่เฟรมเวิร์กทำงานด้วย
compatibility-matrix.avb.vbmeta-version
ไม่บังคับ ใช้โดยเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กเท่านั้น ประกาศเวอร์ชัน AVB ที่ใช้ลงนาม system.img เลิกใช้งานแล้วใน Android 10
compatibility-matrix.vendor-ndk
ไม่บังคับ ใช้โดยเมทริกซ์ความเข้ากันได้ของอุปกรณ์เท่านั้น ประกาศข้อกำหนดของภาพรวมผู้ให้บริการ VNDK หากไม่มี ระบบจะไม่สร้างข้อกำหนด VNDK ในภาพระบบ
compatibility-matrix.vendor-ndk.version
ต้องระบุ จํานวนเต็มที่เป็นบวกที่ประกาศเวอร์ชัน VNDK ที่ภาพผู้ให้บริการจําเป็นต้องใช้
compatibility-matrix.vendor-ndk.library
ไม่บังคับ ซ้ำได้ ประกาศชุดไลบรารี VNDK ที่จําเป็นสําหรับรูปภาพผู้ให้บริการ มีความหมายเหมือนกับ manifest.vendor-ndk.library
compatibility-matrix.system-sdk.version
ไม่บังคับ ซ้ำได้ ใช้โดยเมทริกซ์ความเข้ากันได้ของอุปกรณ์เท่านั้น ประกาศข้อกำหนดของแอปผู้ให้บริการเกี่ยวกับเวอร์ชัน SDK ของระบบ หากไม่มี ระบบจะไม่กำหนดข้อกำหนด SDK ของระบบในภาพระบบ