对于 Android 11 或更高版本,兼容性测试套件 (CTS) 设备交互助手模块允许您自定义某些 CTS 测试与特定设备上的用户界面 (UI) 的交互方式。这意味着可以执行某些操作(例如替换未在Android 兼容性定义文档 (CDD)或 API 文档中涵盖的 UI 元素),同时仍然通过 CTS。
希望在产品开发期间自定义 Android UI 并且需要通过 CTS 的 OEM 也许能够实现助手模块。如果您使用默认的 Android 实现,则无需执行任何额外操作。
实现助手模块
自定义 UI 的要求
查看 CDD 或主线模块,了解是否有任何 UI 要求。如果所需的 UI 已在 CDD 或主线模块中涵盖,则无法自定义该 UI。
如果与所需 UI 交互的 CTS 测试未使用助手框架,则无法自定义该 UI。在更改 UI 之前,与测试所有者合作转换测试模块。
否则,您可以自定义 UI。
实现工作流程
- 根据您的特定产品需求自定义 UI。
- 将现有的 AOSP 助手模块指定为需要与 UI 交互的 CTS 测试模块的子类。根据自定义的 UI 适当地替换必要的交互。替换因更改类型而异。
- OEM 子类位于 OEM 软件包中,例如
com.[oem].cts.helpers
。 - 每个 OEM 子类都以一个通用前缀命名,该前缀将其与 AOSP 实现区分开来,AOSP 实现的前缀为
Default
。
- OEM 子类位于 OEM 软件包中,例如
- 按照这些测试运行程序约定将助手构建到 APK 中。
Android.bp
应使用与包含的软件包相同的名称声明android_test_helper_app
。- APK 的
AndroidManifest.xml
必须声明一个名为interaction-helpers-prefix
的元数据属性,其值为上一步中选择的类前缀。 - 应用应依赖于
cts-helpers-core
、cts-helpers-interfaces
和com.android.cts.helpers.aosp
。如果 OEM 助手完全实现了所有相关接口,则com.android.cts.helpers.aosp
是可选的。
- 在设备映像中设置
ro.vendor.cts_interaction_helper_packages
属性以包含 APK 的名称。如果您需要在多个 APK 中分隔助手实现,则此属性可以包含以英文冒号分隔的软件包列表。 - 确保在为 CTS 运行 Tradefed 时,APK 在
testcases
目录中可用。如果需要,请通过检查 logcat 消息来确认是否选择了预期的助手实现类。 - 可选但强烈建议:将您的助手实现提交到 AOSP 或使其可用于第三方测试。
助手实现示例
例如,CtsPrintTestCases
需要一个助手,其接口在 ICtsPrintHelper
中定义。AOSP 实现称为 com.android.cts.helpers.aosp.DefaultCtsPrintHelper
。
如果您自定义打印 UI,则可以创建子类化 DefaultCtsPrintHelper
的 com.oem.cts.helpers.OemCtsPrintHelper
。Android.bp
中的 android_test_helper_app
命名为 com.oem.cts.helpers
,这将生成 com.oem.cts.helpers.apk
,并在 AndroidManifest.xml
中将 interaction-helpers-prefix
声明为 Oem
。
设备属性 ro.vendor.cts_interaction_helper_packages
设置为 com.oem.cts.helpers
。
参考实现
参考实现包括 cts/libs/helpers
下的接口和 cts/helpers
下的默认 AOSP 助手。顶层接口记录在 cts/libs/helpers/core/src/com/android/cts/helpers/ICtsDeviceInteractionHelper.java
中。
要将 CTS 测试连接到其助手,测试所有者可以使用 @Rule
定义,该定义记录在 cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java
中。
每个使用该框架及其预期助手行为的 CTS 模块都记录在 cts/libs/helpers/core/src/com/android/cts/helpers
下定义的接口中。
运行 CTS 测试
在没有助手的情况下进行测试
除了一个属性之外,设备运行时不存在在没有助手的情况下进行测试的选项,但这可以选择性地修改 CTS 测试与设备的交互方式。如果您需要在没有助手实现的情况下运行 CTS,则有两种选择
- 从设备中删除
ro.vendor.cts_interaction_helper_packages
属性。这将完全阻止在该版本上使用助手。 - 在运行 CTS 之前,从
testcases
目录中删除助手 APK。这将阻止任何运行使用助手,直到将 APK 恢复到testcases
。
您可以使用 Tradefed 参数和 ro.vendor.cts_interaction_helper_packages
属性控制来更改默认设置,后者是助手 APK 的加载位置。
请参阅以下内容,了解每个可用设置的预期值或范围。
ro.vendor.cts_interaction_helper_packages
是一个以英文冒号分隔的字符串,其中包含软件包名称。它可以采用任何对于 OEM 助手实现而言有效的软件包选择的值。cts-tradefed
接受device-interaction-helper:property-name
参数,该参数会临时更改一次测试运行的预期属性,例如--module-arg 'CtsPrintTestCases:{device-interaction-helper}property-name:debug.cts.hlp'
。属性名称的值可以是您在设备上设置的任何属性。属性的值遵循与上述ro.vendor.cts_interaction_helper_packages
属性相同的限制。
使用自定义项进行测试
默认情况下,参考实现会在库存 Android 系统上通过 CTS。检查合作伙伴实现是否通过了带有 UI 自定义项的 CTS。运行涵盖您自定义的 UI 或功能的任何 CTS 模块。
某些 CTS 模块或助手可能尚不支持某些自定义项。
- 与您要自定义的 UI 交互的 CTS 模块可能未使用助手框架。预计 CTS 模块会根据需求和测试所有者的优先级转换为助手框架。在该过程的早期提交转换请求,以确保转换被纳入计划,类似于请求 CTS 更改以支持您计划的功能。
- 现有助手提供的功能可能无法完全满足您想要进行的自定义项。助手功能应抽象出 UI 依赖项。如果助手功能间接具有 UI 依赖项,则可以将其视为 CTS 中的错误。