對於 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 中的錯誤。