Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

アプリの中核品質

最終更新日: 2021 年 2 月 10 日

このチェックリストでは、アプリの品質を評価するのに役立つ、一連の中核品質基準とそれに関連するテストを定義しています。これらの基準の一部は見落としやすいため、このテストを使用することで忘れずにテスト計画に取り入れることができます。

このチェックリストは、すべてのアプリが満たすべき最低限の品質基準を確認するためのものです。実際のテストでは、ここで説明されている内容以上のチェックを行うことをおすすめします。

品質チェックリストの各項目には、チームとやり取りする際に便利な固有の ID が割り当てられています。

視覚的エクスペリエンス

アプリでは、一貫性のある直感的ユーザー エクスペリエンスを提供するために、標準的な Android 視覚デザインと操作パターンを適宜指定する必要があります。

分野 ID テスト 説明
ナビゲーション VX-N1 CR-3 アプリは、標準システムの戻るボタンのナビゲーションをサポートするものとし、画面上のプロンプトとしてカスタムの「戻るボタン」は一切使用しない。
VX-N2 CR-3 アプリは、前の画面 / ホーム画面に戻るためのジェスチャー ナビゲーションをサポートしている。
VX-N3 CR-1
CR-3
CR-5

アプリでは、ユーザーやアプリの状態を適切に保存し、復元する。

アプリは、フォアグラウンドから離れる際にユーザーやアプリの状態を保存し、戻るボタンの使用や他の状態変化により誤ってデータが消失するのを防ぐ。

フォアグラウンドに戻る際には、保存された状態や、保留中であった重要なステートフル トランザクション(編集可能なフィールドに対する変更、ゲームの進捗、メニュー、動画、アプリやゲームのその他のセクションなど)を復元しなければならない。

  1. 最近使ったアプリのスイッチャーからアプリを再開すると、ユーザーが最後に使用したときとまったく同じ状態に戻る。
  2. デバイスがスリープ(ロック)状態から復帰した後でアプリを再開すると、ユーザーが最後に使用したときとまったく同じ状態に戻る。
  3. ホームや [すべてのアプリ] からアプリを再起動すると、アプリは最後に使用されてから経過した時間に応じて、次のいずれかを行う。
    • アプリが最後に使用されてから短い時間(数分)しか経過していない場合は、可能な限り前回に近い状態を復元する。
    • アプリが最後に使用されてからそれ以上の時間が経過している場合、可能な限り前回に近い状態を復元するか、ホーム画面またはその他のデフォルトの状態から起動する。
通知 VX-S1 CR-9

通知は、マテリアル デザインのガイドラインを遵守している。具体的な内容は次のとおり。

  1. 通知は、相互プロモーションや別の製品の広告を目的として使用しない(Play ストアでは固く禁止されている)。
  2. 1 つのチャンネルからすべての通知を配信するのではなく、ベスト プラクティスに従って通知チャンネルを適切に定義する。
  3. 適切な通知の優先度を選択する。
  4. 複数の通知は、可能であれば、1 つの通知グループにスタックされるようにする。
  5. 必要に応じて、通知のタイムアウトを設定する。
  6. 通知が継続するのは、音楽の再生(詳しくは機能に関するセクションを参照)や通話など、進行中のイベントに関連する場合のみ。
VX-S2 CR-9

メッセージ / ソーシャル アプリと会話の場合:

  1. 会話には MessagingStyle 通知を使用する。
  2. ダイレクト返信アクションをサポートする。
  3. 会話のショートカットをサポートし、ダイレクト シェアのランキングを上げるためのベスト プラクティスを実装している。
  4. バブルをサポートする。
UI とグラフィックス VX-U1 CR-5 アプリでは、横向きと縦向きの両方をサポートする(可能な場合)。

いずれの向きでも、機能や動作の大部分が同じになるようにし、同等の機能が保持されるようにする。コンテンツやビューの小さな変更は許容される。

VX-U2 CR-5 アプリでは、いずれの向きでも画面全体を使用し、向きの変化に対応する手段としてレターボックスを使わない。

画面の形状の小さな違いを補正する場合、小規模なレターボックスの追加は許容される。

VX-U3 CR-5 アプリでは、表示の問題を引き起こしたり状態を失ったりすることなく、ディスプレイの向きの急な変化に適切に対処する。
画質 VX-V1 CR(すべて)

アプリは、目立った歪み、ぼやけ、粗さなどを生じさせずに、グラフィックス、テキスト、画像、その他の UI 要素を表示する。

  1. 可能であれば、アプリでベクター型ドローアブルを使用する。
  2. アプリでは、対象となるあらゆる画面サイズやフォーム ファクタ向けに高品質のグラフィックを提供する。
  3. メニューやボタンなどの UI 要素の縁で、エイリアシングが一切生じない。
VX-V2 CR(すべて)

アプリは、テキストとテキスト ブロックを、サポートされている各言語で問題のない状態で表示する。

  1. 構成が、サポートされるあらゆるフォーム ファクタに対応できる。
  2. 文字や単語が途中で切れていない。
  3. ボタンやアイコン内の単語が不適切な位置で改行されていない。
  4. テキストと周囲の要素の間に十分なスペースがある。
VX-V3 CR(すべて) アプリのコンテンツ、およびアプリが参照するすべてのウェブ コンテンツは、ダークテーマをサポートする。

機能

アプリには、想定される機能の動作を実装する必要があります。

分野 ID テスト 説明
音声 FN-A1 CR-1
CR-8
音声は、アプリがフォアグラウンドに戻ると、再開するか、再生が一時停止状態であることをユーザーに知らせる。
FN-A2 CR-1
CR-2
CR-8
音声再生が主要な機能である場合、アプリはバックグラウンド再生をサポートする。
FN-A3 CR-0

ユーザーが音声の再生を開始したら、アプリは 1 秒以内に次のいずれかを行う。

  1. 音声の再生を開始する。
  2. 音声データが準備されていることを示すインジケーターを表示する。
FN-A4 CR-0 アプリは、音声の再生が開始された場合は音声フォーカスをリクエストし、再生が停止した場合は音声フォーカスを破棄する。
FN-A5 CR-0 アプリは、他のアプリからの音声フォーカスのリクエストを処理する(例: 別のアプリで音声が再生されたときに再生音量を小さくする)。
メディア FN-M1 CR-0
CR-6
CR-8
アプリがバックグラウンドで音声を再生する場合は、MediaStyle でスタイル設定された通知を作成する。
FN-M2 CR-0 アプリが動画を再生する場合、ピクチャー イン ピクチャーの再生をサポートする。
FN-M3 CR-0 アプリが動画をエンコードする場合は、HEVC 動画圧縮規格を使用する。
共有 FN-S1 CR-0 アプリがコンテンツを共有するときは、Android Sharesheet を使用する。 Android Sharesheet は、カスタム ソリューションでは利用できないターゲットを提案できます。
バックグラウンド サービス FN-B1 CR-6 アプリは、可能な限りバックグラウンド サービスの実行を回避する。ユーザーのデバイスがスムーズに動作するように、システムによりバックグラウンド サービスに関するさまざまな制限が適用されます。次のようなバックグラウンド サービスの使用方法は推奨されません。
  • 通知用にネットワーク接続を維持する
  • Bluetooth 接続を維持する
  • GPS をオンにしたままにする

目的に合ったソリューションを選択する方法をご覧ください。

FN-B2 CR-10 アプリは、Android 6.0 で導入された電源管理機能(Doze とアプリ スタンバイ)を適切にサポートする。電源管理によって中核機能が妨げられる場合は、資格要件を満たすアプリのみが免除を要求できます。Doze とアプリ スタンバイにおけるその他のユースケースのサポートをご覧ください。

パフォーマンスと安定性

アプリは、ユーザーの期待するパフォーマンス、安定性、互換性、応答性を提供する必要があります。

分野 ID テスト 説明
安定性 PS-S1 CR(すべて)
SD-1
アプリは、クラッシュせず、ANR(Android 応答なし)エラーを引き起こすUI スレッドをブロックしない。Google Play のリリース前レポートを利用して、安定性に関する潜在的な問題を特定します。デプロイ後は、Google Play Console の Android Vitals のページに注意を払ってください。
パフォーマンス PS-P1 CR(すべて)
SD-1
アプリは、すぐに読み込まれるようにする。または、読み込みにかかる時間が 2 秒を超える場合は、画面上でユーザーに対するフィードバック(進行状況を示すインジケーターや、同様のシグナル)を提供する。
PS-P2 CR(すべて)
SD-1
アプリは、16 ms ごとにフレームをレンダリングし、60 フレーム/秒を達成する。デベロッパーは、テストの [HWUI レンダリングのプロファイル作成] オプションを使用できます。問題が発生した場合は、遅いレンダリングの診断に役立つツールが利用できます。
PS-P3 PM-1 StrictMode を有効にしている場合(下記の StrictMode によるテストを参照)、アプリのテスト時に赤の点滅(StrictMode からのパフォーマンスの警告。ストレージ、ネットワーク アクセス、メモリリークに関する動作不良を示す)が表示されない。
SDK PS-T1 CR-0 アプリは、クラッシュしたり、コア機能に大きな影響を与えたりすることなく、最新公開版の Android プラットフォームで動作する。
PS-T2 SP-1 アプリは、targetSdk 値を設定して、最新の Android SDK をターゲットに設定する。
PS-T3 SP-1 アプリは、compileSdk 値を設定して、最新の SDK で構築されている。
PS-T4 SP-2
SP-3
使用されているサードパーティ SDK が最新である。これらの SDK の改善(安定性、互換性、セキュリティなど)は、適切なタイミングでユーザーに提供される必要があります。

デベロッパーは、使用されているサードパーティ SDK を含む、アプリのコードベース全体について責任を負います。
PS-T5 CR-0 アプリは、非 SDK インターフェースを使用していない。
電池 PS-B1 BA-1 アプリは、Android 6.0 で導入された電源管理機能(Doze とアプリ スタンバイ)を適切にサポートする。電源管理によって中核機能が妨げられる場合は、資格要件を満たすアプリのみが免除を要求できます。デベロッパーは開発中にこれらの ADB コマンドを使用して、アプリ スタンバイと Doze の動作をテストできます。

電池使用量の観点では、デベロッパーは Android Studio Energy Profiler または Battery Historian ツールを使用し、計画済みのバックグラウンド作業と組み合わせて、想定外の電池使用量について診断できます。

プライバシーとセキュリティ

アプリは、ユーザーデータと個人情報を、適切な権限レベルで安全に処理する必要があります。

Google Play ストアで公開するアプリの場合、このチェックリストに加え、ユーザーデータに関するポリシーも遵守することで、ユーザーのプライバシーを保護できるようにします。

分野 ID テスト 説明
権限 SC-P1 SC-4 アプリは、現在のユースケースのサポートに必要な最小限の権限のみをリクエストする。位置情報などの権限については、可能であれば、精細な位置情報ではなく、おおよその位置情報を使用してください。
SC-P2

アプリは、アプリの主要なユースケースに直接関係がある場合にのみ、センシティブ データ(SMS、通話履歴位置情報など)や料金がかかるサービス(電話アプリや SMS など)へのアクセス権限をリクエストする。これらの権限に関連する影響については、ユーザーに明確に開示してください。

権限の使用方法によっては、機密情報にアクセスせずにアプリのユースケースに対応できる別の方法を使用できる(ユーザーの連絡先に関連する権限をリクエストする代わりに、暗黙的インテントを使用してアクセスをリクエストする方が適切な場合など)。

SC-P3 CR-0 アプリは、実行時の権限を、アプリの起動時にあらかじめリクエストするのではなく、機能がリクエストされたときにコンテキスト内でリクエストする。
SC-P4 CR-0

アプリの UX で、特定の権限が必要な理由を明確に伝えるように設計する。それができない場合は、推奨フローに従って、アプリの機能に権限が必要な理由を説明します。

ユーザーが権限を拒否または取り消すと、アプリがグレースフル デグラデーションを実行する。アプリで、ユーザーがアプリの全体にアクセスできないようにしてはなりません。

データとファイル SC-DF1 SC-1 機密データがすべてアプリの内部ストレージに保存される。
SC-DF2 SC-10 ユーザーの個人データやセンシティブ データが、システムログまたはアプリ固有のログに記録されない。
SC-DF3 アプリでは、識別のために IMEI などの再設定不可能なハードウェア ID を使用しない。
ID SC-ID1 CR-0 アカウント認証情報やその他の機密情報(クレジット カード情報、住所、電話番号など)を自動入力するためのヒントを提供する。
SC-ID2 CR-0 Android 用ワンタップ を統合してシームレスにログインできるようにする。
SC-ID3 CR-0 生体認証を統合して、支払い取引や機密情報(重要なユーザー ドキュメントなど)を保護する。
アプリ コンポーネント SC-AC1 SC-5 他のアプリとデータを共有するアプリ コンポーネント、または他のアプリから呼び出されるコンポーネントのみがエクスポートされる。

これには、アクティビティサービスブロードキャスト レシーバ、特にコンテンツ プロバイダが含まれます。

デフォルト値の混乱を最小限に抑えるために、android:exported 属性は常に明示的に設定します。

SC-AC2 CR-0
SC-4

すべてのインテントとブロードキャストを、次のベスト プラクティスに沿って設定する。

  1. リンク先のアプリが正しく定義されている場合は、明示的インテントを使用する。
  2. インテントを使用して、すでに権限を持っている別のアプリに権限を委任する
  3. アプリ間でセキュアにデータを共有する
  4. ペイロードを含むインテントは、使用する前に検証する。
  5. インテントを別のアプリに渡し、受信側アプリが呼び出し元アプリでコールバックを呼び出して想定できるようにする場合は、ネストされたインテントをエクストラに含めない。これには、PendingIntent を使用します。
  6. PendingIntent を設定するときに、必要に応じて不変のフラグを明示的に設定する。
SC-AC3 SC-3 アプリ間でコンテンツを共有するすべてのコンテンツ プロバイダは、カスタム権限android:protectionLevel="signature" を使用する。これには、アクティビティサービスブロードキャスト レシーバ、特にコンテンツ プロバイダが含まれます。ほとんどのアプリは、インストール済みパッケージのリストにアクセスする必要がないようにします(Android 11 以降、アクセスが制限されています)。
ネットワーク SC-N1 SC-9 すべてのネットワーク トラフィックが SSL 経由で送信される。
SC-N2 SC-6 アプリがネットワーク セキュリティ構成を宣言している。
SC-N3 アプリが Google Play 開発者サービスを使用する場合、アプリの起動時にセキュリティ プロバイダが初期化される
ライブラリ SC-U1 SP-2 すべてのライブラリ、SDK、依存関係が最新である。
SC-U2 製品版アプリにはデバッグ ライブラリが含まれていないため、パフォーマンスやセキュリティの問題が発生する可能性がある。
WebView SC-W1 SC-6 ローカル コンテンツへのアクセスに setAllowUniversalAccessFromFileURLs() を使用しない。代わりに、WebViewAssetLoader を使用します。
SC-W2 SC-7 WebView では、信頼できないコンテンツに対して addJavaScriptInterface() を使用しない

Android 6.0 以降では、代わりに HTML メッセージ チャネルを使用します。

実行 SC-E1 アプリが、アプリの APK の外部からコードを動的に読み込むことがない。デベロッパーは Android App BundlePlay Feature DeliveryPlay Asset Deliveryを含む)を使用する必要があります

(2021 年 8 月から、Google Play ストアのすべての新しいアプリについて、Android App Bundle の使用が必須となります)。

暗号 SC-C1 アプリが、プラットフォームで提供される強力な暗号アルゴリズムと乱数生成ツールを使用する。また、アプリがカスタム アルゴリズムを実装していない。

Google Play

Google Play でアプリが公開できることを確認します。

分野 ID テスト 説明
ポリシー GP-P1 GP(すべて) アプリが Google Play デベロッパー コンテンツ ポリシーの各条項を遵守している。不適切なコンテンツを提供したり、他者の知的財産やブランドを使用したりしていない。
GP-P2 GP-1 アプリの対象年齢が、コンテンツのレーティングに関するガイドラインに基づいて適切に設定されている。
アプリの詳細ページ GP-D1 GP-1
GP-2

アプリのフィーチャー グラフィックが、こちらのサポート記事で概説されているガイドラインを遵守している。次の内容を確認すること。

  1. アプリのリストに、高品質のフィーチャー グラフィックが含まれている。
  2. フィーチャー グラフィックに含まれているデバイスの画像、スクリーンショット、小さなテキストが、アプリの対象となる画面サイズのうち最も小さな画面で縮小表示されたときに読みにくくならない。
  3. フィーチャー グラフィックが、広告のように見えるものではない。
GP-D2 GP-1 アプリのスクリーンショットや動画で、Android 以外のデバイスを表示したり、そうしたデバイスに言及したりしない。
GP-D3 GP-1 アプリのスクリーンショットや動画で、アプリの内容や使用感を伝える際に、誤解を招くような表現を使わない。
ユーザー サポート GP-X1 GP-1 Google Play ページの [レビュー] タブに表示される、ユーザーにより報告された一般的なバグについては、そのバグが再現可能で多数の異なるデバイスで発生する場合に対処する。バグがごく一部のデバイスでのみ発生する場合でも、該当のデバイスが特に人気のあるものや新しいものであれば、そのバグに対処する必要があります。

テスト環境の設定

このチェックリストのテスト環境を設定するにあたって、次のことをおすすめします。

  • エミュレータのテストに重点を置く - Android Emulator は、さまざまな Android バージョンと画面解像度でアプリをテストするのに最適なツールです。ターゲット ユーザーの最も一般的なフォーム ファクタとハードウェア / ソフトウェアの組み合わせを表すものとして、エミュレートされたデバイス(AVD)を設定する必要があります。
  • ハードウェア デバイス - テスト環境では、主要なフォーム ファクタと、現在ユーザーが利用可能なハードウェアとソフトウェアの組み合わせの典型として、実際のハードウェア デバイスを少数用意します。市販されているあらゆるデバイスでテストを実施する必要はありません。1 つのフォーム ファクタにつき 1~2 台のデバイスを使い、代表的な一部のデバイスについてのみテストを行います。
  • デバイスのテストラボ - Firebase Test Lab などのサードパーティのサービスを使用して、さまざまなデバイスでアプリをテストすることもできます。
  • 最新バージョンの Android でテストする - ターゲット ユーザーの典型的な Android バージョンをテストするだけでなく、最新バージョンの Android(現在は Android 11)についてもテストする必要があります。これにより、最新の動作変更によってユーザー エクスペリエンスが低下しないようにすることができます。

単体テスト、統合テスト、UI テストなど、テストの総合的なガイダンスについては、Android テストの基礎をご覧ください。

テスト手順

次のテスト手順は、アプリの品質に関するさまざまな問題を発見するのに役立ちます。複数のテストを組み合わせたり、複数のテストグループを独自のテスト計画に統合したりできます。これらのテスト手順に各基準を関連付ける方法については、上記のセクションをご覧ください。

タイプ テスト 説明
基本事項 CR-0

すべての画面、ダイアログ、設定、ユーザーフローといった、アプリのあらゆる部分について、ナビゲーションを確認します。

  1. 編集やコンテンツの作成、ゲームプレイ、メディア再生が可能なアプリの場合、それらのフローをひととおりテストします。
  2. アプリのテスト中に、通知の受信や電話の着信など、他のアプリからの割り込みを発生させ、デバイス属性(ネットワーク接続、電池の機能、GPS の利用、システム負荷など)に一時的な変更を適用します。
  3. すべてのアプリ内購入フローをテストします。
CR-1 アプリの各画面で、デバイスのホームボタンを押すか、ジェスチャー ナビゲーションで上にスワイプした後、[すべてのアプリ] 画面からアプリを再起動します。
CR-2 アプリの各画面から、実行中の別のアプリに切り替えた後、最近使ったアプリのスイッチャーを使ってテスト対象のアプリに戻ります。
CR-3 アプリの各画面(とダイアログ)で、[戻る] ボタンを押すか、スワイプ操作で戻ります。
CR-5 アプリの各画面で、少なくとも 3 回、デバイスを回転させて横向きと縦向きを切り替えます。
CR-6 別のアプリに切り替えて、テスト対象のアプリをバックグラウンドに移行します。[設定] に移動し、テスト対象のアプリがバックグラウンド中に実行しているサービスがあるかどうかをチェックします。Android 4.0 以降では、[アプリ] 画面に移動して、[実行中] タブで該当のアプリを見つけます。
CR-7 電源ボタンを押してデバイスをスリープ状態にしてから、電源ボタンをもう一度押して画面を復帰させます。
CR-8 デバイスで画面ロックを設定します。電源ボタンを押してデバイスをスリープ状態にします(デバイスがロックされます)。電源ボタンをもう一度押して画面を復帰させ、デバイスのロックを解除します。
CR-9 通知ドロワーで、アプリが表示できるあらゆるタイプの通知を表示させて確認します。展開できる通知については展開し(Android 4.1 以降)、利用可能なすべてのアクションをタップします。
CR-10 Doze とアプリ スタンバイの他のユースケースのサポートを確認します。
SD カードへのインストール SD-1 デバイスの SD カードにインストールしたアプリについて、「基本事項」のテストを繰り返します(アプリがこのインストール方法をサポートしている場合)。

アプリを SD カードに移動するには、[設定] > [アプリ情報] > [SD カードに移動] を使用できます。

パフォーマンスと安定性 SP-1 Android マニフェスト ファイルとビルド構成を見直し、アプリが最新の利用可能な SDKtargetSdkcompileSdk)に基づいてビルドされていることを確認します。
SP-2 build.gradle ファイルに古い依存関係がないか確認します。
SP-3 Android Studio の lint ツールを使用して、非 SDK インターフェースの使用を検出します。他のテスト方法もあります。
パフォーマンスのモニタリング PM-1 StrictMode のプロファイリングを有効にした状態で、「基本事項」のテストを繰り返します。

ガベージ コレクションや、ガベージ コレクションがユーザー エクスペリエンスに及ぼす影響に細心の注意を払います。

電池 BA-1 Doze とアプリ スタンバイのサイクル全体で「基本事項」のテストを繰り返します。

アラーム、タイマー、通知、同期などに細心の注意を払います。要件とガイドラインについては、Doze モードとアプリ スタンバイ モードでテストするを参照してください。

セキュリティ SC-1 外部ストレージに保存されているデータをすべて確認します。
SC-2 外部ストレージから読み込まれたデータがどのように処理されているかを確認します。
SC-3 Android マニフェスト ファイルで定義されているすべてのコンテンツ プロバイダを確認します。各プロバイダに適切な protectionLevel が指定されていることを確認します。
SC-4 アプリが必要とするすべての権限を、マニフェスト ファイル、実行時、およびデバイス上のアプリ設定画面([設定] > [アプリ情報])で確認します。
SC-5 Android マニフェスト ファイルで定義されているすべてのアプリ コンポーネントが適切なエクスポート状態になっていることを確認します。エクスポートされたプロパティは、すべてのコンポーネントに対して明示的に設定する必要があります。
SC-6 アプリのネットワーク セキュリティ構成を見直して、構成に対する lint チェックが失敗しないことを確認します。
SC-7 各 WebView で、JavaScript が必要なページに移動します。
SC-8 各 WebView で、アプリによって直接読み込まれていないサイトとコンテンツに移動してみます。
SC-9 クリアテキスト トラフィックを無効にするネットワーク セキュリティ構成を宣言してから、アプリをテストします。
SC-10 アプリを実行し、すべてのコア機能を使用している状態で、デバイスログを監視します。ユーザーの個人情報は記録してはなりません。
Google Play GP-1 Google Play Console にログインして、デベロッパー プロフィール、アプリの説明、スクリーンショット、フィーチャー グラフィック、コンテンツのレーティング、ユーザーのフィードバックを確認します。
GP-2 フィーチャー グラフィックとスクリーンショットをダウンロードし、対象とするフォーム ファクタやデバイスのディスプレイ サイズに合わせて縮小します。
GP-3 すべての画像および映像、メディア、テキスト、コード ライブラリ、アプリや拡張ファイルのダウンロードに含まれるその他のパッケージ コンテンツを確認します。

StrictMode によるテスト

パフォーマンス テストでは、アプリで StrictMode を有効にして、パフォーマンス、ネットワーク アクセス、ファイルの読み取り / 書き込みなどに影響を及ぼす可能性のある操作を見つけることをおすすめします。メインスレッドと他のスレッドの両方で、問題のある可能性がある操作を探します。

StrictMode.ThreadPolicy.Builder を使用してスレッドごとのモニタリング ポリシーを設定し、detectAll() を使用して ThreadPolicy でサポートされているすべてのモニタリングを有効にできます。

ThreadPolicy については、penaltyFlashScreen() を使って、ポリシー違反のビジュアル通知を必ず有効にしてください。