CTS デバイス インタラクション ヘルパー モジュール

Android 11 以降では、互換性テストスイート(CTS)デバイス インタラクション ヘルパー モジュールを使用すると、CTS テストで特定のデバイスのユーザー インターフェース(UI)を操作する方法をカスタマイズできます。つまり、Android 互換性定義ドキュメント(CDD)または API ドキュメントに記載されていない UI 要素の置き換えなどのアクションは、CTS に合格したまま行えます。

プロダクトを開発する際に Android UI をカスタマイズし、CTS に合格する必要がある OEM は、ヘルパー モジュールを実装できる場合があります。デフォルトの Android 実装を使用する場合、追加の作業は必要ありません。

ヘルパー モジュールの実装

UI をカスタマイズするための要件

UI の要件について、CDD モジュールまたはメインライン モジュールを確認します。目的の UI が CDD モジュールかメインライン モジュールでカバーされている場合、その UI はカスタマイズできません。

目的の UI を操作する CTS テストでヘルパー フレームワークを使用しない場合、その UI はカスタマイズできません。テストオーナーと協力して、UI を変更する前にテスト モジュールを変換してください。

それ以外の場合は、UI をカスタマイズできます。

実装ワークフロー

  1. 特定のプロダクトに合わせて UI をカスタマイズします。
  2. 既存の AOSP ヘルパー モジュールを、UI を操作する必要がある CTS テスト モジュールのサブクラスとして指定します。必要な操作は、カスタマイズ対象の UI に合わせて適切に置き換えます。置き換えは、変更の種類によって異なります。
    • OEM サブクラスは、com.[oem].cts.helpers などの OEM パッケージに含まれています。
    • 各 OEM サブクラスの名前には、接頭辞 Default が付けられた AOSP 実装と区別する、共通の接頭辞が付けられます。
  3. 次に示すテストランナーの規則に従って、ヘルパーを APK に組み込みます。
    • Android.bp は、含まれているパッケージと同じ名前で android_test_helper_app を宣言する必要があります。
    • APK の AndroidManifest.xml は、前の箇条書きで選択したクラス接頭辞の値を使用して、interaction-helpers-prefix というメタデータ プロパティを宣言する必要があります。
    • アプリは、cts-helpers-corects-helpers-interfacescom.android.cts.helpers.aosp に依存する必要があります。OEM ヘルパーが関連するインターフェースすべてを完全に実装している場合、com.android.cts.helpers.aosp は省略可能です。
  4. APK の名前を含めるように、デバイス イメージの ro.vendor.cts_interaction_helper_packages プロパティを設定します。ヘルパー実装を複数の APK に分割する必要がある場合、このプロパティにはパッケージのコロン区切りリストを含めることができます。
  5. CTS の Tradefed を実行しているとき、testcases ディレクトリで APK が利用可能であることを確認します。必要に応じ、logcat メッセージを調べて、期待されるヘルパー実装クラスが選択されていることを確認します。
  6. (省略可能ですが強くおすすめします)ヘルパー実装を AOSP に送信するか、サードパーティ テストで使用できるようにします。

ヘルパー実装の例

たとえば、CtsPrintTestCases は、ICtsPrintHelper で定義されたインターフェースを持つヘルパーを期待します。AOSP 実装は com.android.cts.helpers.aosp.DefaultCtsPrintHelper と呼ばれます。

プリント UI をカスタマイズする場合は、DefaultCtsPrintHelper をサブクラス化する com.oem.cts.helpers.OemCtsPrintHelper を作成できます。Android.bpandroid_test_helper_appcom.oem.cts.helpers という名前を付けられ、com.oem.cts.helpers.apk を生成し、AndroidManifest.xmlinteraction-helpers-prefixOem として宣言します。

デバイス プロパティ ro.vendor.cts_interaction_helper_packagescom.oem.cts.helpers に設定されます。

リファレンス実装

リファレンス実装には、cts/libs/helpers のインターフェースと、cts/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 テストの実行

ヘルパーなしのテスト

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 引数を受け入れます。プロパティ名の値には、デバイスで設定した任意のプロパティを使用できます。プロパティの値は、上記の ro.vendor.cts_interaction_helper_packages プロパティと同じ制限に従います。

カスタマイズを伴うテスト

デフォルトでは、リファレンス実装はストック Android で CTS を渡します。パートナーの実装が、UI のカスタマイズを伴う CTS に合格することを確認します。カスタマイズした UI または機能をカバーする CTS モジュールを実行します。

CTS モジュールまたはヘルパーの中には、まだ一部のカスタマイズをサポートしていないものもあります。

  • カスタマイズする UI を操作する CTS モジュールは、ヘルパー フレームワークを使用しない場合があります。CTS モジュールは、需要とテストオーナーの優先順位に基づいてヘルパー フレームワークに変換されることが期待されます。計画した機能をサポートするために CTS の変更をリクエストする場合と同様、変換がスケジュールどおりに行われるように、プロセスの早い段階で変換をリクエストします。
  • 既存のヘルパーによって提供される関数は、実施するカスタマイズに完全には対応していない場合があります。ヘルパー関数は UI の依存関係を抽象化する必要があります。ヘルパー関数に間接的に UI の依存関係がある場合、CTS のバグと同様に扱うことができます。