CTS を実行するには、まず、物理環境、デスクトップ マシン、テストに使用しているデバイスを準備します。
物理環境
Bluetooth LE ビーコン
テスト対象デバイス(DUT)が Bluetooth LE をサポートしている場合、Bluetooth LE スキャンテスト用に少なくとも 3 台の Bluetooth LE ビーコンを DUT の 5 m 以内に設置します。ビーコンはどんなものでも構いません。設定は不要で、特定の出力をする必要もありません。iBeacon や Eddystone だけでなく、BLE ビーコンをシミュレートするデバイスも、これにあてはまります。
カメラ
カメラ CTS を実行する場合は、通常の照明条件を使用し、テストパターン チャート(チェックボード パターンなど)をレンズに近付けすぎないようにします(距離はデバイスの最短焦点距離によって異なります)。
十分な照明があるシーンにカメラセンサーを向けて、テスト対象のセンサーが CONTROL_AE_TARGET_FPS_RANGE
で指定された最大設定目標 FPS(1 秒あたりのフレーム数)に到達し、それを維持するにようにします。これは、getCameraIdList
で取得したカメラセンサーのすべてに適用されます。リストアップされたデバイスのすべてをテストし、個別に性能を測定するためです。
DUT が USB ウェブカメラなどの外部カメラをサポートしている場合は、CTS の実行時に外部カメラを接続します。接続していない場合は、CTS テストが失敗します。
GPS / GNSS
DUT がグローバル ポジショニング システム / 全球測位衛星システム(GPS / GNSS)の機能をサポートしている場合は、DUT に、受信と GPS の位置計算に適した信号レベルの GPS / GNSS 信号(GPS の部分は ICD-GPS-200C に準拠)を与える必要があります。GPS / GNSS の信号源はどのようなものでも構いません。衛星シミュレータや屋外信号の GPS / GNSS 中継器を使用しても、DUT を十分な GPS / GNSS 信号を直接受信できるように窓に近い場所に置いても構いません。
Wi-Fi と IPv6
CTS テストには、IPv6 に対応し、DUT を隔離されたクライアントとして扱うことができ、インターネット接続のある Wi-Fi ネットワークが必要です。隔離されたクライアントとは、Wi-Fi AP の設定により、または他のデバイスが接続されていない隔離されたサブネットワークで DUT を動作させることにより、DUT がそのサブネットワーク上のブロードキャスト / マルチネットワーク メッセージを認識できない構成を指します。
IPv6 に依存したテストの合格に必要な、ネイティブ IPv6 ネットワーク、IPv6 キャリア ネットワーク、VPN にアクセスできない場合は、Wi-Fi アクセス ポイントと IPv6 トンネルを使用できます。Wikipedia の IPv6 トンネル ブローカーのリストをご覧ください。
Wi-Fi RTT
Android には Wi-Fi 往復時間(RTT)のための Wi-Fi RTT API があるため、デバイスでアクセス ポイントまでの距離を 1 メートルから 2 メートルの精度で測定することができ、屋内の位置精度が大幅に向上しました。Wi-Fi RTT に対応しているデバイスとして、Google Wifi と Compulab の fitlet2 アクセス ポイント(5 GHz で 40 MHz の帯域幅に設定)を推奨しています。
アクセス ポイントには電源を入れる必要がありますが、ネットワークに接続する必要はありません。アクセス ポイントはテストするデバイスのすぐ近くにある必要はありませんが、DUT から 12 メートル以内にあることが推奨されます。通常、1 台のアクセス ポイントで十分です。
デスクトップ マシンのセットアップ
ADB と AAPT
CTS を実行する前に、最近のバージョンの Android Debug Bridge(adb) と Android Asset Packaging Tool(AAPT)がインストールされており、それらのツールの場所がマシンのシステムパスに追加されていることを確認してください。
ADB をインストールするには、ご使用のオペレーティング システムの Android SDK Tools パッケージをダウンロードして、それを開き、README ファイルの手順に従ってください。トラブルシューティングについては、スタンドアロン SDK Tools のインストールをご覧ください。
adb
と aapt
がシステムパスにあるのを確認します。次のコマンドは、ホーム ディレクトリでパッケージ アーカイブを開いたことを前提としています。
export PATH=$PATH:$HOME/android-sdk-linux/build-tools/version
Java 開発キット
適切なバージョンの Java 開発キット(JDK)をインストールします。Android 7.0 以降の場合は、次をインストールします。
- Ubuntu では、OpenJDK 8 を使用します。
- macOS では、jdk 8u45 以降を使用します。
詳細については、JDK の要件をご覧ください。
CTS のファイル
デバイスの Android バージョンとデバイスでサポートされているすべてのアプリケーション バイナリ インターフェース(ABI)に一致する CTS パッケージをダウンロードして開きます。
最新バージョンの CTS メディア ファイルをダウンロードして開きます。
デバイスの検出
デバイスを検出するようにシステムを設定する手順に従います。たとえば、Ubuntu Linux の場合は udev
ルールファイルを作成します。
Android デバイスのセットアップ
ユーザービルド
互換性のあるデバイスは、ユーザーキーまたはリリースキーで署名されたビルドを搭載したデバイスと定義されます。このため、デバイスでは、コードネーム、タグ、ビルド番号から互換性があるとわかるユーザービルド(Android 4.0 以降)をベースとしたシステム イメージが動作している必要があります。
初期 API レベルのビルド プロパティ
CTS の要件には、デバイスの最初の出荷時に搭載したビルドによって異なるものがあります。たとえば、最初の出荷時に以前のビルドを搭載したデバイスは、その後のビルドを搭載したデバイスに適用されるシステム要件から除外される場合があります。
この情報を CTS に認識させるには、デバイス メーカーがビルド時のプロパティ ro.product.first_api_level
を定義します。このプロパティの値は、デバイスが発売された際の初期 API レベルです。
デバイス メーカーは、新製品で既存製品と共通の実装を再利用するとき、新製品を同じデバイス グループ内の既存製品のアップグレードとして出荷できます。デバイス メーカーは、必要に応じて既存製品の API レベルを ro.product.first_api_level
に設定できます。それによって CTS や Treble / VTS にアップグレード要件が適用されます。
デバイス メーカーは、次の例のように PRODUCT_PROPERTY_OVERRIDES
を device.mk
ファイルに追加して、このプロパティを設定できます。
#ro.product.first_api_level indicates the first api level that the device has been commercially launched on. PRODUCT_PROPERTY_OVERRIDES +=\ ro.product.first_api_level=21
Android 9 以降用の初期 API レベル
Android 9 以降を搭載して出荷されたデバイスの場合は、ro.product.first_api_level
プロパティにコード名、タグ、ビルド番号の有効な値を設定します。
Android 8.x 以前用の初期 API レベル
Android 8.x 以前を搭載して出荷されたデバイスの場合は、製品の最初のビルドの ro.product.first_api_level
プロパティを設定しません(削除します)。それ以降のすべてのビルドでは、ro.product.first_api_level
を正しい API レベルの値に設定します。こうすることで、このプロパティにより新製品が正しく識別され、その製品の初期 API レベルに関する情報が保持されます。このフラグが設定されていない場合、Android により Build.VERSION.SDK_INT
が ro.product.first_api_level
に設定されます。
CTS shim アプリ
Android 7.0 には、こちらのソースからビルドされた次のアプリが含まれています。これらのアプリには、マニフェスト以外のコードが含まれていません。
frameworks/base/packages/CtsShim/CtsShim.apk
この APK ファイルはシステム イメージの/system/app/CtsShimPrebuilt.apk
にコピーされています。frameworks/base/packages/CtsShim/CtsShimPriv.apk
この APK ファイルはシステム イメージの/system/priv-app/CtsShimPrivPrebuilt.apk
にコピーされています。
CTS は、これらのアプリを使用して特権と権限をテストします。テストに合格するには、これらのアプリを再署名せずにシステム イメージ上の適切なディレクトリにプリロードする必要があります。
CTS shim APEX
Android 10 以降には APEX というパッケージ形式があります。APEX 管理 API の CTS テストを作成するには(新バージョンへの更新、有効な APEX のレポートなど)、ターゲット デバイスに CtsShimApex
パッケージをプリインストールする必要があります。
CtsShimApex
を /system
パーティションにプリインストールする必要があります。
ro.apex.updatable
プロパティが true
に設定されている場合、APEX パッケージ管理をサポートするすべてのデバイスに CtsShimApex
が必要です。ro.apex.updatable
プロパティが指定されていないか、設定されていない場合、デバイスに CtsShimApex
をプリインストールする必要はありません。APEX shim 検証テストでは、CtsShimApex
の実装を検証します。
サンプル アプレット
Android 9 では Open Mobile API を導入しています。複数のセキュア エレメントをレポートするデバイスの場合、CTS により Open Mobile API の動作を検証するテストケースが追加されます。これらのテストケースでは、サンプル アプレットを、DUT の組み込みセキュア エレメント(eSE)または DUT で使用する SIM カードに 1 回インストールする必要があります。eSE サンプル アプレットと SIM サンプル アプレットは AOSP にあります。
Open Mobile API のテストケースとアクセス制御のテストケースの詳細については、セキュア エレメントの CTS テストをご覧ください。
ストレージ要件
CTS メディア ストレステストでは、外部ストレージ(/sdcard
)に動画クリップが必要です。クリップのほとんどは Big Buck Bunny からのものです。その著作権は Blender Foundation にあり、クリエイティブ・コモンズ表示 3.0 ライセンスのもとで提供されています。
必要な容量は、デバイスの動画再生でサポートされている最高解像度によって異なります。プラットフォームのバージョンで要求される解像度については、互換性定義のセクション 5 をご覧ください。DUT の動画再生機能のチェックには、Android 5.0 以降では android.media.MediaCodecInfo.CodecCapabilities
API を使用し、それ以前のバージョンの Android では android.media.CamcorderProfile
API を使用します。
動画再生の最高解像度ごとの保存容量の要件は次のとおりです。
- 480x360: 98 MB
- 720x480: 193 MB
- 1,280x720: 606 MB
- 1,920x1,080: 1,863 MB
ディスプレイとストレージ
- ディスプレイを搭載していないデバイスには、ディスプレイを接続する必要があります。
- デバイスにメモリカード スロットがある場合は、空の SD カードを挿入します。CTS に確実に合格できるように、SDHC または SDXC の容量で、UHS バス対応であるか、スピードクラス 10 以上の SD カードを使用してください。
- デバイスに SIM カードスロットがある場合は、アクティベーション済みの SIM カードをスロットに挿入します。デバイスが SMS に対応している場合、各 SIM カードに固有の番号フィールドが設定されている必要があります。
デベロッパー UICC
CTS キャリア API テストを実行するには、デバイスに、キャリア特権ルールが設定された SIM カードが必要です。UICC の準備をご覧ください。
Android デバイスの設定
- デバイスを出荷時設定にリセットします: [設定] > [バックアップとリセット] > [データの初期化]
- デバイスの言語を英語(米国)に設定します: [設定] > [言語と入力] > [言語]
- デバイスに GPS または Wi-Fi / モバイル ネットワークの機能がある場合は、位置情報の設定をオンにします: [Settings] > [Location] > [On]
- IPv6 対応で、DUT を隔離されたクライアント(物理環境をご覧ください)として扱うことができ、インターネットに接続している Wi-Fi ネットワークに接続します: [Settings] > [Wi-Fi]
- デバイスにロックパターンまたはパスワードが設定されていないことを確認します: [Settings] > [Security] > [Screen lock] > [None]
- デバイスで USB デバッグを有効にします: [Settings] > [Developer options] > [USB debugging]
- 時刻を 12 時間形式に変更します: [Settings] > [Date & time] > [Use 24-hour format] > [Off]
- デバイスがスリープ状態にならないようにします: [Settings] > [Developer options] > [Stay Awake] > [On]
- Android 5.x と 4.4.x の場合のみ、デバイスを仮の現在地情報を許可するように設定します: [Settings] > [Developer options] > [Allow mock locations] > [On]
- Android 4.2 以降の場合、USB アプリの確認をオフにします: [Settings] > [Developer options] > [Verify apps over USB] > [Off]
- ブラウザを開き、起動画面と設定画面を閉じます。
- デバイスのテストに使用するデスクトップ マシンを USB ケーブルで接続します。
ファイルのインストール
デバイスにヘルパーアプリをインストールして設定します。
- 以下の CTS バージョンごとの手順で、デバイスをセットアップします。
- CTS バージョン 2.1 R2 から 4.2 R4: 以下のコマンドで、ユーザー補助テストを実行するようにデバイス(あるいはエミュレータ)をセットアップします。
adb install -r android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk
デバイスで委任を有効にします: [Settings] > [Accessibility] > [Accessibility] > [Delegating Accessibility Service] - CTS バージョン 6.x 以前:
android.software.device_admin
を宣言しているデバイスで以下のコマンドを使用して、デバイス管理テストを実行するようにデバイスをセットアップします。adb install -r android-cts/repository/testcases/CtsDeviceAdmin.apk
[Settings] > [Security] > [Select device administrators] で、2 人のandroid.deviceadmin.cts.CtsDeviceAdminReceiver*
デバイス管理者を有効にします。android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver
と他のすべてのプリロードされたデバイス管理者が無効になっていることを確認します。
- CTS バージョン 2.1 R2 から 4.2 R4: 以下のコマンドで、ユーザー補助テストを実行するようにデバイス(あるいはエミュレータ)をセットアップします。
- 以下のようにして、CTS メディア ファイルをデバイスにコピーします。
- メディア ファイルをダウンロードして展開したパスに移動(
cd
)します。 - 次のように、ファイルの権限を変更します。
chmod u+x copy_media.sh
- 次のように
copy_media.sh
を実行します。- 解像度が 720x480 以下のクリップをコピーするには、次のコマンドを実行します。
./copy_media.sh 720x480
- 最高の解像度がわからない場合は、次のコマンドですべてのファイルをコピーします。
./copy_media.sh all
- adb の配下に複数のデバイスがある場合は、シリアル オプション(
-s
)を最後に追加します。たとえば、720x480 以下をシリアル 1234567 のデバイスにコピーするには、次のコマンドを実行します。./copy_media.sh 720x480 -s 1234567
- 解像度が 720x480 以下のクリップをコピーするには、次のコマンドを実行します。
- メディア ファイルをダウンロードして展開したパスに移動(