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

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

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

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

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

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

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

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

เมทริกซ์ความเข้ากันได้ของอุปกรณ์ (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
ที่จำเป็น. เวอร์ชัน Meta ของเมทริกซ์ความเข้ากันได้นี้ อธิบายองค์ประกอบที่คาดหวังในเมทริกซ์ความเข้ากันได้ ไม่เกี่ยวข้องกับเวอร์ชัน XML
compatibility-matrix.type
ที่จำเป็น. ประเภทของเมทริกซ์ความเข้ากันได้นี้:
  • "device" : เมทริกซ์ความเข้ากันได้ของอุปกรณ์
  • "framework" : เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์ก
manifest.level
จำเป็นสำหรับเมทริกซ์ความเข้ากันได้ของเฟรมเวิร์ก ใน Android 12 ขึ้นไป อนุญาตในไฟล์เมทริกซ์ความเข้ากันได้ของเฟรมเวิร์กในผลิตภัณฑ์และพาร์ติชัน 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 HALs ใช้ได้เฉพาะกับเมทริกซ์ความเข้ากันได้ meta-เวอร์ชัน 2.0 เท่านั้น
  • "native" : HAL ดั้งเดิม
compatibility-matrix.hal.optional
แอตทริบิวต์เป็นทางเลือกและมีค่าเริ่มต้นเป็นเท็จ ระบุว่า HAL นี้เป็นทางเลือกสำหรับเจ้าของเมทริกซ์ความเข้ากันได้หรือไม่ (เฟรมเวิร์กหรืออุปกรณ์) หากรายการ <hal> ถูกทำเครื่องหมายว่าเป็นทางเลือก หมายความว่าเจ้าของสามารถทำงานกับ 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 บิต ล้นส่งผลให้เกิดการตัดทอน (Parser ยอมรับค่าตั้งแต่ -2 64 + 1 ถึง 2 64 - 1 บิตที่ 65 ถูกตัดทอน สำหรับรายละเอียด โปรดดูที่ หน้า strtoull man )
  • range . รูปแบบคือ [int]-[int] เช่น 10-20 ยอมรับค่าเลขฐานสิบหกและต้องขึ้นต้นด้วย 0x หรือ 0X ขอบเขตสองขอบเขตต้องเป็นจำนวนเต็ม 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
ไม่บังคับ สามารถทำซ้ำได้ ใช้โดยเมทริกซ์ความเข้ากันได้ของอุปกรณ์เท่านั้น ประกาศข้อกำหนดโดยแอปของผู้จำหน่ายในเวอร์ชัน System SDK หากไม่มี จะไม่มีการสร้างข้อกำหนด System SDK บนอิมเมจระบบ