对于 Android 11 或更高版本,兼容性测试套件 (CTS) 设备交互帮助程序模块可让您自定义某些 CTS 测试如何与特定设备上的用户界面 (UI) 交互。这意味着可以在仍通过 CTS 的同时完成操作,例如替换Android 兼容性定义文档 (CDD)或 API 文档未涵盖的 UI 元素。
想要在产品开发过程中自定义 Android UI 并需要通过 CTS 的 OEM 可能可以实现帮助模块。如果您使用默认的 Android 实现,则不需要额外的工作。
实现辅助模块
自定义 UI 的要求
检查 CDD 或 Mainline 模块是否有任何 UI 要求。如果所需的 UI 包含在 CDD 或 Mainline 模块中,则无法自定义该 UI。
如果与所需 UI 交互的 CTS 测试不使用帮助框架,则无法自定义该 UI。在更改 UI 之前,与测试所有者合作转换测试模块。
否则,您可以自定义 UI。
实施工作流程
- 根据您的特定产品的需要自定义 UI。
- 将现有的 AOSP 帮助程序模块指定为需要与 UI 交互的 CTS 测试模块的子类。为定制的 UI 适当地替换必要的交互。更换因更改类型而异。
- OEM 子类位于 OEM 包中,例如
com.[oem].cts.helpers
。 - 每个 OEM 子类都使用一个公共前缀来命名,该前缀将其与 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 分隔帮助程序实现,则此属性可以包含以冒号分隔的包列表。 - 确保在运行 Tradefed for CTS 时 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
helpers 下的默认 AOSP 助手。顶级接口记录在cts/libs/helpers/core/src/com/android/cts/helpers/ICtsDeviceInteractionHelper.java
中。
要将 CTS 测试连接到它的助手,测试所有者可以使用cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java
中记录的@Rule
定义。
每个使用该框架的 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 中的错误。