0.はじめに
昨今、注目を浴びているAndroidですが、CTSというのは、みなさんご存知でしょうか?
名前は聞いたことあっても、実際、使ったこと無い人がほとんどだと思います。
なぜなら、アプリベンダーにはあまり関係ないことですから。しかし、Androidを利用して、世に
何らかのハードを出そうという人たち(メーカ、個人含む)、またはframeworkを改変(Bug対応など)し、
Android Open Source Projectsにsubmitしようとする人にとっては、実は避けては通れない道です。
本記事は、そんな人たちのために捧げます。
株式会社ブリリアントサービス
技術部 藤井洋祐(twitterID:@i_m_yosuke)
(校正)
技術部 藤田竜史(twitterID:@ryuuuji)
※藤田くん、チェックありがとう。
1.CTS概要
1.1 CTSの目的
CTS(正式にはCompatibility Test Suite。以下、CTS)は、Google社が
Android Platform採用端末に実施を義務付けているTest群です。Google社は、
今までOEM、もしくはキャリア依存であったPlatformをAndroidで汎用化しました。
CTSは、Android Marketで配布されるアプリケーションが、
どのOEMのAndroid端末でもスムーズに利用可能なよう(OEMによって、特化されすぎないよう)に、
主要な公開APIを実行し、チェックします。
世の中にAndroidPlatform採用端末を配布する場合、これらTest群を全てpassすることが
互換性を保つという証になり、そういうプロセスを経て初めて「Android端末」を
名乗ることが出来るのではないでしょうか。
蛇足ですが、Android 2.3 Compatibility Definition Document(CDD)という、
Android Platform使用するためのRequirementがあります。
こちらもあわせて、目を通されることをお勧めします。
参照: http://source.android.com/compatibility/2.3/android-2.3.3-cdd.pdf
注.本内容は、2011年8月22日現在、Google社が提供する環境を元に作成しております。
1.2 CTSの動作
CTSは、自動化されたハーネスです。以下の二つを含みます。
・テスト実行の管理
・ターゲットデバイス上で実行されるテストケースのAPKファイル

大まかな手順としては、以下のようになります。
1.CTSをDownload
2.ターゲットデバイスの接続
3.アクセスビリティテスト実行準備
a)android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk をインストール
b)以下の手順でインストールしたアクセスビリティサービスを有効にします。
Settings > Accessibility > Accessibility > Delegating Accessibility Service
4.アドミニストレータテスト実行準備
a)android-cts/repository/testcases/CtsDeviceAdmin.apk をインストール
b)Settings > Location & security 以下にあるandroid.deviceadmin.cts .* を全て有効にします。
5.CTSを起動します。
6.CTSレポートが作成されます。
参照: http://source.android.com/compatibility/cts-intro.html
1.3 CTSのテスト範囲
テスト範囲は以下の通りです。(現在、大きく分けて7つになります)

参照:http://source.android.com/compatibility/cts-intro.html
2. CTSの環境作り
2.1 必要なもの
(ハード)
・PC - DownloadしたCTSを実施します。
・ターゲットデバイス - Android Platformを採用したデバイスです。
(ソフト)
PCに必要なもの
・Android Developersから、SDKをDownloadしてください。(PC OSに適合したもの)
※Build環境が整っているということが前提となります。
参照: http://developer.android.com/sdk/index.html

Note.
CTS実施環境について、PC側のOSは、こちら側で確認取れているのは、Linux(Ubuntu)、MacOSです。
Windowsに関しましては、CTS側環境がWindowsに適合していない部分があり、実行Errorとなります。
CTS側環境を改変+Cygwinで、動作は確認しています。機会があれば別途紹介いたします。
・Android Open source project から、ターゲットデバイスのFirmware versionにあわせたCTSを
PCの任意の場所にDownloadしてください。
参照: http://source.android.com/compatibility/downloads.html

Note.
CTSは、ターゲットデバイスで採用されているFirmware versionにあわせて、選択する必要があります。
Android2.3(Gingerbread)採用の場合、CTS2.3R5が実施すべきCTS versionとなります。(図2.1-2参照)
2.2 実施準備
2.1.1 CTS実施フォルダ作成
2.1章でDownloadしたCTS 2.3R5(android-cts-2.3_r5-x86.zip)を任意の場所で解凍します。

解凍後、図2.2-2のようなフォルダが作成されます。

2.2.2 環境変数の設定
CTSは、/android-cts/tools/startctsを実行することで起動します。startctsは、
スクリプトで書かれており、CTS2.3R5では、そのスクリプト中で環境変数を
2つ使用しています。
環境変数その1 CTS_ROOT
if [ -z "${CTS_ROOT}" ]; then
CTS_ROOT="$(dirname $0)/.."
fi;
通常使用の場合、特に意識、変更、設定する必要は、ありません。
環境変数その2 SDK_ROOT
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi
~/.bashrcに、exportを追加します。
export SDK_ROOT=~/android-sdk-linux_x86
Note.
.bashrcを変更せずに、下記のようにSDK_ROOTの初期値を直接与えても構いません。
SDK_ROOT=”~/android-sdk-linux_x86”
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi
2.2.3 CTS実行
CTS実行するには、前述のようにstartctsを実行します。

上記のようにcts_hostプロンプトが表示されれば正常に起動されています。
3. CTSの操作(基本編)
3.1 プランCTSの確認
CTSのプランは、”ls –plan”で確認することが出来ます。
現在は、計8種類提供されています。プランCTSは、そのうちのひとつです。

Note.
Google社へは、プランCTS(図3.1-1の赤丸)実施、作成されたレポートを提出します。
本記事では、プランCTS以外の説明は割愛いたしますが、プランCTSで実施される各種テストが
目的別に小分けされたようなものだと考えてください。
プランCTSが提供する項目を”ls --plan CTS”で確認することが可能です。
現在は、計42項目のテストパッケージが提供されております。

3.2 プランCTSの実施
3.2.1 プランCTS実施方法その1
プランCTSは、“start –plan CTS”で実行されます。
書式:start --plan test_plan_name

Note.
自動で、端末Rebootを繰り返しながら、プランCTSの項目を順に実施していきます。
3.2.2 プランCTS実施方法その2
プランCTSを図3.1-2で表示したテストパッケージ単位で実施することが可能です。
”-p”オプションにて、テストパッケージ名を指定します。
書式:start --plan test_plan_name -p java_package_name
下記の例では、”android.apidemos.cts”を実施させています。

Note.
指定されたテストパッケージに含まれるテストシナリオが全部実行された後、
cts_hostプロンプトが表示されコマンド入力待ちとなります。
3.2.3 プランCTS結果確認
CTS実施結果は、android-cts/repository/results 直下に、CTS開始日付フォルダが作成され、そこに格納されます。

Note.
resultsフォルダの下に、zipファイルが作成されます。
これは、前述のCTS実施結果が格納されるCTS開始日付フォルダをcompressしたものです。
Google社へは、このzipファイルを提出します。
CTS実施結果フォルダには、図3.2.3-2で示すようなファイル群が存在します。

testResult.xmlに実行毎に結果が反映されていきます。その結果は、ブラウザで確認可能です。
testResult.xmlをブラウザでOpenすると下記、図3.2.3-3のように表示されます。

他の情報もブラウザスクロールによって表示されます。

CTSがエラーを検知した場合、下記のように、Result列が赤くなり、エラー詳細が表示されます。

Note.
Failure Detailsに表示されるエラー内容では、
どのようなAPIを使用した結果エラーとなったのかが判別しにくい場合があります。
その場合、CTSソースコード(AOSPから取得可能)を解析し、エラー要因、
APIを特定する必要があります。
以上です。