この記事は Sachiyo Sugimoto による Android Developers Blog の記事 " Developer-Powered CTS (CTS-D) " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android の強みは多様なデバイスからなるエコシステムにあります。世界中の数十億のユーザーが、市場に出回っている 2 万 4,000 種類以上のデバイスを使っています。Android では、デバイスが一貫性のある安定したアプリ環境を提供し続けることができるように、初期リリースのころから Android 互換性プログラムを推進しています。
このプログラムで重要な位置を占めるのが、互換性テストスイート (CTS) です。CTS は 200 万件以上のテストケースのコレクションで、デベロッパーのアプリがさまざまなデバイスで確実に動作し、ユーザーに一貫したアプリ体験を提供できるようにするために、Android デバイスの実装をチェックします。
デバイス メーカーは、開発プロセス全体で自社デバイスに対して CTS を実行し、早い段階でバグを見つけて修正しています。このスイートは、長年にわたって拡張が重ねられ、新しいテストケースが追加されています。現在の CTS には 200 万件を超えるテストが含まれていますが、その数はまだ増え続けています。Android が進化するにつれて網羅すべき新しい領域が増えており、まだ十分にカバーできていない部分もあるため、それを埋めるテストを追加する作業が続いています。
ほとんどの CTS テストは Android エンジニアが記述していますが、アプリ デベロッパーには実際のデバイスの互換性問題に対して独自の視点があることも事実です。そこで、アプリ デベロッパーからの優れた提案を活用して CTS を拡張するため、デベロッパーの皆さんが作成して実行できる CTS-D という新しいテストスイートを追加します。
CTS-D は、アプリ デベロッパーの皆さんに開発に加わっていただく斬新な CTS モジュールであり、アプリ デベロッパーが現場で目にしている問題点に重点を置いたものです。デベロッパーはテストケースを作成して CTS-D に提供することで、そういった問題を見つけやすくすることができます。また、自分で CTS-D スイートを実行して互換性を検証することもできます。長期的には、Android デベロッパー コミュニティと密接に連携して CTS-D スイートを拡張していく予定です。
すでに多くの皆さんが独自のテストを作成し、さまざまなデバイスで互換性の検証をしていることは承知しています。そこで、皆さんと連携してそのテストを AOSP に組み込みたいと考えています。コミュニティからの提供を受けた最初のテストスイートは、こちらの CTS-D の初回コミットから確認できます。
つまり、CTS-D を通してこういったテストを広く利用できるようにすることで、デバイス メーカーやアプリ デベロッパーが問題を効率的に特定して共有できるようにします。
CTS-D はオープンソースで、AOSP で公開されています。そのため、すべてのアプリ デベロッパーが CTS-D を検証ツールとして使うことができます。CTS-D によって、アプリ デベロッパー、デバイス メーカー、Google 間とのそれぞれのコミュニケーションのオーバーヘッドを最小限にとどめ、問題を効率的に解決できるようになります。
あるデバイスが CTS-D テストに合格しなかった場合は、こちらの Issue Tracker テンプレートを使って問題を報告してください。報告されたデバイスで問題を検証した後、その解決に向けてパートナーと連携して作業を進めます。デバイス メーカーの皆さんにも、CTS-D を使って問題を見つけ、対策することを強くおすすめします。
CTS-D について何かアイデアをお持ちの方は、テストコードを AOSP に提供する前に、こちらの Issue Tracker テンプレートを使ってテスト提案をお送りください。Android チームが皆さんの提案を確認し、テストの適格性を検証します。現在、私たちの一番の関心は、電源管理領域のテストケースを追加することにあります。
CTS と同じく、新しい CTS-D のテストケースも適格性要件を満たす必要があり、実行できるのは以下の内容のみに限られます。
CTS-D についてもっと詳しく知りたい方は、こちらのチュートリアルをご覧ください。CTS-D に貢献する方法や、CTS-D の使い方を説明しています。なお、新しい CTS-D テストケースの審査には時間がかかる可能性がありますので、ご了承ください。皆さんが CTS-D を試してくださることを期待しています。Android の体験向上のために、ぜひご協力ください。
refContentProvider()
releaseWakeLock()
JobScheduler.schedule()