兼容性矩陣

本節描述了框架和設備兼容性矩陣和兼容性矩陣模式。對於比賽規則,請參見匹配規則

框架兼容性矩陣 (FCM)

框架兼容性矩陣 (FCM) 描述了框架對其運行的設備的要求。該框架兼容性矩陣由系統了兼容性矩陣,所述的產品的兼容性矩陣,並且system_ext兼容性矩陣。設備清單必須滿足 FCM 的要求(在構建時、運行時和 VTS 中強制執行的要求)。

system_ext FCM 和產品 FCM 是特定於設備的 FCM(安裝在系統分區中)的補充。

  • 該裝置FCM應反映模塊的在要求的系統分區
  • system_ext FCM 應反映 system_ext 分區中模塊的要求。
  • 該產品FCM應反映模塊的需求產品分區

所有 FCM 都應與 OEM 對系統、產品和 system_ext 分區中的框架的修改保持一致。例如,如果安裝在產品分區中的應用程序使用 HAL 接口的供應商擴展,則應在產品 FCM 中聲明 HAL 接口要求。

示例係統兼容性矩陣文件:

<?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 與系統和 system_ext 分區中的 FCM 連接起來。

示例產品 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
必需的。此兼容性矩陣的元版本。描述兼容性矩陣中預期的元素。與 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
屬性是可選的,默認為 false。說明此 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 。十進制和十六進制(必須以0x0X)值被接受。解釋為 64 位整數;溢出導致截斷。 (解析器從-2 64 + 1〜2 64接受的值- 1,第65位被截斷;有關詳細信息請參閱strtoull將人頁。)
  • range 。格式為[int]-[int] ,如10-20 。十六進制值被接受並必須以0x0X 。兩個邊界必須是一個無符號的 64 位整數。
  • tristate 。有效值是ymn
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 版本的要求。如果缺失,則對系統映像沒有系統 SDK 要求。