Android 9 供应商测试套件 (VTS) 支持一种运行时方法,用于使用设备配置来识别应为该设备目标跳过哪些 VTS 测试。
VTS 测试灵活性
自 Android 8.0 起,对于所有搭载 Android 8.0 及更高版本的设备,均需进行 VTS 测试。但是,并非所有 VTS 测试都适用于所有设备目标。例如:
- 如果特定设备不支持测试 HAL(例如 IR),则 VTS 无需针对该设备目标运行该 HAL 测试。
- 如果多个设备共享相同的SoC和供应商镜像,但硬件功能不同,VTS必须确定是否应为特定设备目标运行或跳过测试。
VTS 测试类型
VTS 包括以下测试类型
- 合规性测试确保框架和供应商分区之间的兼容性。在搭载 Android 8.0 或更高版本的设备上启动时,必须运行(并通过)这些测试。
- 非合规性测试帮助供应商提高产品质量(性能/模糊测试等)。这些测试对于供应商是可选的。
测试是否为合规性测试取决于其所属的计划。使用 VTS 计划 运行的测试被视为合规性测试。
确定支持的 HAL
VTS 可以使用以下文件来确定设备目标是否支持特定的 HAL
/system/compatibility_matrix.xml
。声明框架所需的 HAL 实例。示例<hal format="hidl" optional="true"> <name>android.hardware.vibrator</name> <version>1.0-1</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
optional
属性指示框架是否严格要求 HAL。- 该文件可能包含同一 HAL(名称相同)的多个条目,但版本和接口不同。
- 该文件可能包含同一条目的多个
version
配置,表明框架可以与不同的版本一起工作。 version1.0-1
表示框架可以与最低版本 1.0 一起工作,并且不需要高于 1.1 的版本。
- 设备
manifest.xml
。声明供应商提供的 HAL 实例。示例<hal format="hidl"> <name>android.hardware.vibrator</name> <transport>hwbinder</transport> <version>1.2</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
- 该文件可能包含同一 HAL(名称相同)的多个条目,但版本和接口不同。
- 如果文件仅包含单个条目的
version
配置,则version1.2
表示供应商支持从 1.0~1.2 的所有版本。
- lshal。设备上的一个工具,显示有关在
hwservicemanager
中注册的 HAL 服务的运行时信息。示例android.hardware.vibrator@1.0::IVibrator/default
lshal
还显示所有具有直通实现的 HAL(即设备上具有相应的-impl.so
文件)。示例android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/) android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
合规性测试
对于合规性测试,VTS 依赖于供应商清单来确定(和测试)设备提供的所有 HAL 实例。决策流程
非合规性测试
对于非合规性测试,VTS 依赖于供应商清单和 lshal
输出,以确定(和测试)未在 manifest.xml
文件中声明的实验性 HAL。决策流程
查找供应商清单
VTS 按照以下顺序在以下位置检查供应商 manifest.xml
文件
/vendor/etc/vintf/manifest.xml
+ ODM 清单(如果相同的 HAL 在两个位置都定义,则 ODM 清单会覆盖/vendor/etc/vintf/manifest.xml
中的清单)/vendor/etc/vintf/manifest.xml
- ODM
manifest.xml
文件,从以下文件按以下顺序加载/odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
/odm/etc/vintf/manifest.xml
/odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
/odm/etc/manifest.xml
/vendor/manifest.xml
VTS 可测试性检查器
vts_testibility_checker
是与 VTS 打包在一起的二进制文件,VTS 测试框架在运行时使用它来确定给定的 HAL 测试是否可测试。它基于 libvintf
来加载和解析供应商清单文件,并实现上一节中描述的决策流程。
使用 vts_testability_check
- 对于合规性测试
vts_testability_check -c -b <bitness> <hal@version>
- 对于非合规性测试
vts_testability_check -b <bitness> <hal@version>
vts_testability_check
的输出使用以下 json 格式
{testable: <True/False> Instances: <list of instance names of HAL service>}
确定访问的 HAL
要确定 VTS 测试访问哪些 HAL,请确保每个 HAL 测试都使用 VtsHalHidlTargetTestEnvBase
模板来注册测试中访问的 HAL。然后,VTS 测试框架可以在预处理测试时提取已注册的 HAL。
对于合规性测试,您还可以检查 /system/etc/vintf/manifest.xml
。如果在此处定义了 HAL,VTS 应该对其进行测试。(对于系统提供的 HAL 服务(例如 graphics.composer/vr
),HAL 在 /system/manifest.xml
中声明。)