兼容性矩阵

本节介绍框架和设备兼容性矩阵以及兼容性矩阵架构。如需了解匹配规则,请参阅匹配规则

框架兼容性矩阵 (FCM)

框架兼容性矩阵 (FCM) 描述了框架对其运行设备的要求。框架兼容性矩阵由系统兼容性矩阵、产品兼容性矩阵system_ext 兼容性矩阵组成。设备清单必须满足 FCM 的要求(在构建时、运行时以及 VTS 中强制执行的要求)。

system_ext FCM 和产品 FCM 是设备特定 FCM(安装在 system 分区中)的补充。

  • 设备 FCM 应反映 system 分区中模块的要求。
  • system_ext FCM 应反映 system_ext 分区中模块的要求。
  • 产品 FCM 应反映 product 分区中模块的要求。

所有 FCM 都应与 OEM 对 system、product 和 system_ext 分区中框架的修改保持一致。例如,如果安装在 product 分区中的应用使用 HAL 接口的供应商扩展,则应在 product 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 是 product 分区中的框架兼容性矩阵文件。VINTF 对象在运行时将产品 FCM 与 system 和 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 与 system 和 product 分区中的 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(Android 15 或更低版本)
属性是可选的,默认为 false。说明此 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,必需,可以重复,但不能重复。格式为以下之一
  • 主版本号.次版本号最小值-次版本号最大值
  • 主版本号.次版本号(等同于 主版本号.次版本号-次版本号

对于 AIDL HAL,在运行 Android 11 及更低版本的设备上不得存在。在运行更高版本的设备上为可选。如果指定,格式为以下之一
  • 版本号最小值-版本号最大值
  • 版本号(等同于 版本号-版本号
如果未指定,则值默认为 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
可选,可以重复。指定框架在每个内核版本上需要的内核配置列表。
可以存在多个具有相同 <version><kernel>,以表示“与”关系。每个 <kernel> 都是仅当满足 <conditions> 时才启用的要求“片段”。
compatibility-matrix.kernel.version
必需。内核版本。格式为 版本号.主修订号.次修订号。版本号和主修订号必须完全匹配。次修订号定义了框架期望的内核的最低 LTS 版本。
compatibility-matrix.kernel.condition
可选。每个版本的第一个 <kernel> 不得存在。指定条件列表。当满足条件时,将启用此 <kernel> 片段中声明的要求。
compatibility-matrix.kernel.config
可选,可以重复。列出此内核版本必须匹配的 CONFIG 项。每个 CONFIG 项都是键值对;config 项通过键区分。
compatibility-matrix.kernel.config.key
必需。CONFIG 项的键名。以 CONFIG_ 开头。
compatibility-matrix.kernel.config.value
必需。CONFIG 项的值。格式取决于类型
  • string。省略引号。
  • int。接受十进制和十六进制(必须以 0x0X 开头)值。解释为 64 位整数;溢出会导致截断。(解析器接受的值范围为 -264 + 1 到 264 - 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
可选;仅由框架兼容性矩阵使用。声明用于签署 system.imgAVB 版本。在 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 要求。