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

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をカスタマイズできます。

実装ワークフロー

  1. 特定の製品の必要に応じてUIをカスタマイズします。
  2. UIと対話する必要があるCTSテストモジュールのサブクラスとして、既存のAOSPヘルパーモジュールを指定します。カスタマイズされた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-interfaces 、およびcom.android.cts.helpers.aospに依存する必要があります。 OEMヘルパーが関連するすべてのインターフェースを完全に実装している場合、 com.android.cts.helpers.aospはオプションです。
  4. デバイスイメージのro.vendor.cts_interaction_helper_packagesプロパティを設定して、APKの名前を含めます。ヘルパーの実装を複数のAPKに分割する必要がある場合、このプロパティにはコロンで区切られたパッケージのリストを含めることができます。
  5. Tradefed for CTSを実行するときは、 testcasesディレクトリでAPKが使用可能であることを確認してください。必要に応じて、logcatメッセージを調べて、予想されるヘルパー実装クラスが選択されていることを確認します。
  6. オプションですが、強くお勧めします。ヘルパーの実装をAOSPに送信するか、サードパーティのテストで利用できるようにします。

ヘルパーの実装例

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

印刷UIをカスタマイズする場合は、 DefaultCtsPrintHelperをサブクラス化するcom.oem.cts.helpers.OemCtsPrintHelperを作成できます。 android_test_helper_appAndroid.bpOemという名前で、 com.oem.cts.helpersを生成し、 AndroidManifest.xmlinteraction-helpers-prefixcom.oem.cts.helpers.apkとして宣言します。

デバイスプロパティro.vendor.cts_interaction_helper_packagescom.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のバグと同様に扱うことができます。