本部分介绍框架和设备兼容性矩阵以及兼容性矩阵结构。如需了解匹配规则,请参阅匹配规则。
框架兼容性矩阵 (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 接口的供应商扩展,则应在产品 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 标记的含义。某些“必需”的标记可以在构建时由 assemble_vintf
写入,因此不一定要包含在 Android 源代码树中的源文件中。设备上的相应文件中必须有此类“必需”的标记。
?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 条目(暗含“and”条件)。 compatibility-matrix.hal.format
- 可选。值可以是以下几项之一:
"hidl"
:HIDL HAL。这是默认设置。"aidl"
:AIDL HAL。仅对兼容性矩阵元版本 2.0 有效。"native"
:原生 HAL。
compatibility-matrix.hal.optional
- 此属性是可选的,默认值为 false。指明此 HAL 对兼容性矩阵(框架或设备)的所有者来说是否是可选的。如果某
<hal>
条目被标记为可选的,则表示在 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
- 可选且可重复。指定框架在每个内核版本上必需的内核配置列表。
可以存在具有同一<version>
的多个<kernel>
,暗含“and”关系。每个<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
。接受十六进制值,且值必须以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
- 可选,仅供框架兼容性矩阵使用。声明用于签署
system.img
的 AVB 版本。在 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 没有要求。