Android 11以降の場合、Compatibility Test Suite(CTS)デバイスインタラクションヘルパーモジュールを使用すると、特定のCTSテストが特定のデバイスのユーザーインターフェイス(UI)とインタラクションする方法をカスタマイズできます。つまり、 Android互換性定義ドキュメント(CDD)やAPIドキュメントでカバーされていないUI要素の置き換えなどのアクションは、CTSを通過しながら実行できます。
製品開発中にAndroidUIをカスタマイズし、CTSに合格する必要があるOEMは、ヘルパーモジュールを実装できる場合があります。デフォルトのAndroid実装を使用する場合、追加の作業は必要ありません。
ヘルパーモジュールの実装
UIをカスタマイズするための要件
UI要件については、CDDまたはメインラインモジュールを確認してください。目的のUIがCDDまたはメインラインモジュールでカバーされている場合、そのUIをカスタマイズすることはできません。
目的のUIと対話するCTSテストがヘルパーフレームワークを使用しない場合、そのUIをカスタマイズすることはできません。 UIを変更する前に、テスト所有者と協力してテストモジュールを変換してください。
それ以外の場合は、UIをカスタマイズできます。
実装ワークフロー
- 特定の製品の必要に応じてUIをカスタマイズします。
- UIと対話する必要があるCTSテストモジュールのサブクラスとして、既存のAOSPヘルパーモジュールを指定します。カスタマイズされたUIに必要なインタラクションを適切に置き換えます。交換は、変更の種類によって異なります。
- OEMサブクラスは、
com.[oem].cts.helpers
などのOEMパッケージに含まれています。 - 各OEMサブクラスには、
Default
のプレフィックスを持つAOSP実装と区別するための共通のプレフィックスが付けられています。
- 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を実行するときは、
testcases
ディレクトリでAPKが使用可能であることを確認してください。必要に応じて、logcatメッセージを調べて、予想されるヘルパー実装クラスが選択されていることを確認します。 - オプションですが、強くお勧めします。ヘルパーの実装をAOSPに送信するか、サードパーティのテストで利用できるようにします。
ヘルパーの実装例
たとえば、 CtsPrintTestCases
は、 ICtsPrintHelper
で定義されたインターフェイスを持つヘルパーを期待しています。 AOSPの実装はcom.android.cts.helpers.aosp.DefaultCtsPrintHelper
と呼ばれます。
印刷UIをカスタマイズする場合は、 DefaultCtsPrintHelper
をサブクラス化するcom.oem.cts.helpers.OemCtsPrintHelper
を作成できます。 android_test_helper_app
のAndroid.bp
はOem
という名前で、 com.oem.cts.helpers
を生成し、 AndroidManifest.xml
でinteraction-helpers-prefix
をcom.oem.cts.helpers.apk
として宣言します。
デバイスプロパティ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
/DeviceInteractionHelperRule.javaに記載されている@Rule
定義を使用できます。
フレームワークとその予想されるヘルパーの動作を使用する各CTSモジュールは、 cts/libs/helpers/core/src/com/android/cts/helpers
で定義されたインターフェースに文書化されています。
CTSテストの実行
ヘルパーなしのテスト
1つのプロパティを除いて、ヘルパーなしでテストするオプションは実行時にデバイスに存在しませんが、オプションでCTSテストがデバイスと対話する方法を変更します。ヘルパーを実装せずにCTSを実行する必要がある場合は、次の2つのオプションがあります。
- デバイスから
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
は、--module-arg 'CtsPrintTestCases:{device-interaction-helper}property-name:debug.cts.hlp'
など、1回のテスト実行で期待されるプロパティを一時的に変更する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のバグと同様に扱うことができます。