アプリの中核品質

Android ユーザーは高品質アプリを期待しています。アプリの品質は、インストール数、ユーザーの評価とレビュー、使用頻度、ユーザーの維持の観点から、アプリの長期間にわたる成功に直接影響します。

このページは、アプリの品質の中核的な側面を評価する際のガイドとなるように、アプリの品質基準と、それを実現するためのテストの情報を簡潔にまとめたものです。すべての Android アプリはこれらの基準に適合している必要があります。

アプリを公開する前に、この基準についてテストし、アプリが多くのデバイスで正しく機能し、ナビゲーションとデザインの Android 標準に適合し、Google Play ストアでのプロモーションの機会に向けた準備が整っていることを確認します。実際のテストはここに記載されている内容をはるかに超えて行われます。このドキュメントの目的は、すべてのアプリが示すべき重要な品質特性をテストプランで網羅できるように、これらの特性を指定することです。

タブレットや TV など、他の Android 端末向けのアプリを作成している場合は、検討するべき追加の品質ガイドラインがあります。

視覚デザインとユーザー インタラクション

次の基準は、一貫性が高く直観的なユーザー エクスペリエンスを実現するため、アプリが標準の Android 視覚デザインとインタラクション パターンを必要に応じて提供することを保証します。

分野 ID 説明 テスト
標準デザイン UX-B1

アプリは Android の設計ガイドラインに従い、共通の UI パターンとアイコンを使用します。

  1. アプリは、システム アイコン([戻る] ボタンなど)の想定される機能を別の機能に再定義することはありません。
  2. アプリは、標準とはまったく異なるアイコンが標準 UI の動作をトリガーする場合、そのアイコンでシステム アイコンを置き換えることはありません。
  3. アプリが標準システム アイコンのカスタマイズ バージョンを提供する場合、そのアイコンはシステム アイコンに非常に類似しており、標準のシステム動作を発生させます。
  4. アプリは、アイコンや動作がユーザーの誤解や混乱につながるような、Android の UI パターンの再定義や誤用はしません。
CR-all
ナビゲーション UX-N1

アプリは、標準システムの[戻る] ボタンのナビゲーションをサポートし、画面上に表示するような、カスタムの「[戻る] ボタン」のプロンプトは一切利用しません。

CR-3
UX-N2

ダイアログはすべて、[戻る] ボタンで閉じることができます。

CR-3
UX-N3 ホームボタンを押すと、常に端末のホーム画面に移動します。 CR-1
通知 UX-S1

通知は Android の設計ガイドラインに従います。特に次のガイドラインを遵守します。

  1. 複数の通知は可能な限り 1 個の通知オブジェクトに蓄積されます。
  2. 通知が持続するのは、進行中のイベント(音楽の再生や通話など)に関連している場合だけです。
  3. 通知には、ユーザーがオプトインしない限り、広告やアプリの中核機能に関連しないコンテンツが含まれません。
CR-11
UX-S2

アプリは、次に挙げるいずれかの目的でのみ通知を使用します。

  1. ユーザーに個人的に関係するコンテキストに変更があったことを示す(メッセージの着信など)、または
  2. 進行中のイベント(音楽の再生や通話など)に関係する情報/コントロールを表示する
CR-11

機能

アプリが、期待どおりの機能動作を適切なパーミッション レベルで実行することを保証するための基準を以下に示します。

分野 ID 説明 テスト
パーミッション FN-P1 アプリは、その中核機能をサポートするために必要な最低限のパーミッションのみを要求します。 SC-4
FN-P2

アプリには、その中核機能に関連する場合を除き、機密性の高いデータ(連絡先やシステムログなど)や課金の可能性があるサービス(電話や SMS など)へアクセスするためのパーミッションを要求する処理は実装されていません。

インストール ロケーション FN-L1

アプリは、SD カード(アプリでサポートされている場合)にインストールした場合も、通常どおり動作します。

サイズの大きいアプリ(10MB 以上)には、SD カードへのインストールのサポートが推奨されます。SD カードへのインストールをサポートする必要のあるアプリのタイプについては、アプリのインストール ロケーションデベロッパー ガイドを参照してください。

SD-1
オーディオ FN-A1 画面がオフの場合、オーディオは、中核機能(アプリが音楽プレーヤーである場合など)でない限り、再生されることはありません。 CR-7
FN-A2 オーディオは、中核機能でない限りロック画面の背後で再生されることはありません。 CR-8
FN-A3 オーディオは、中核機能でない限り、ホーム画面上や別のアプリより優先して再生されることはありません。 CR-1CR-2
FN-A4 アプリがフォアグラウンドに戻ると、オーディオが再開されるか、再生が一時停止状態となっていることがユーザーに通知されます。 CR-1CR-8
UI とグラフィック FN-U1

アプリは、横向きの画面と縦向きの画面の両方をサポートします(可能な場合)。

両方向ともほぼ同じ機能とアクションをサポートし、同等の機能を維持します。コンテンツやビューの若干の変更は認められます。

CR-5
FN-U2

アプリは、両方の画面の向きで全画面表示を使用します。レターボックス表示を行って、画面の向きを変化させることはありません。

画面の形状の若干のばらつきを補正するための若干のレターボックス付けは認められます。

CR-5
FN-U3

アプリは、レンダリングの問題を生じさせることなくディスプレイ画面の向きの迅速な切り替えを正しく処理します。

CR-5
ユーザーまたはアプリの状態 FN-S1

アプリは、バックグラウンドになると、アプリの中核となる機能に関連する場合を除き、どのサービスも実行中のままにしません。

たとえば、アプリは通知用のネットワーク接続を維持したり、Bluetooth 接続を維持したり、GPS のオン状態を維持したりするサービスを実行中のままにしません。

CR-6
FN-S2

アプリは、ユーザーまたはアプリの状態を正しく保持し復元します。

アプリは、フォアグラウンドから抜ける際にはユーザーまたはアプリの状態を保持し、バック ナビゲーションやその他の状態の変更による予期しないデータの損失を防ぎます。アプリがフォアグラウンドに戻ると、保持していた状態を復元し、編集可能なフィールドへの変更内容、ゲームの進行、メニュー、ビデオ、アプリやゲームのその他のセクションなどの、保留中だった重要なステートフル トランザクションも復元する必要があります。

  1. 最近使ったアプリの切り替え機能からアプリが再開された場合、アプリは最後に使用された状態と全く同じ状態にユーザーを戻します。
  2. デバイスがスリープ(ロック)状態から復帰した後でアプリが再開された場合、アプリは最後に使用された状態と全く同じ状態にユーザーを戻します。
  3. アプリが [ホーム] または [すべてのアプリ] から再起動された場合、アプリは前の状態にできるだけ近い状態に復元されます。
  4. [戻る] キーが押されると、アプリまたはユーザーの状態を保存するオプションがアプリからユーザーに対して提供されます。このオプションを選択しないと、バック ナビゲーションでアプリまたはユーザーの状態が失われることになります。
CR-1CR-3CR-5

互換性、パフォーマンス、安定性

ユーザーが期待する互換性、パフォーマンス、安定性、応答性をアプリが提供することを保証するための基準を以下に示します。

分野 ID 説明 テスト
安定度 PS-S1 アプリは、対象の端末で、クラッシュ、強制終了、フリーズ、その他の異常な動作を引き起こしません。 CR-allSD-1HA-1
パフォーマンス PS-P1 アプリの読み込みは迅速に実行され、読み込みに 2 秒以上かかる場合はユーザーへのフィードバック(進行インジケーターや同等の指示)を画面に表示します。 CR-allSD-1
PS-P2 StrictMode が有効になっている場合(下記の StrictMode のテストを参照)、ゲームのプレイ中、アニメーションや UI 遷移、アプリの他の部分など、アプリを実行しているときに、赤の点滅(StrictMode からのパフォーマンスに関する警告)は表示されません。 PM-1
SDK PS-T1 アプリは、最新の公開バージョンの Android プラットフォームで動作し、クラッシュを起こさず中核機能を失いません。 CR-0
PS-T2 アプリは、targetSdk 値で設定した最新の SDK を対象にして動作し、プラットフォームから提供される互換性のための代替機能をできる限り使用しないようにします。 SP-1
PS-T3 アプリは、compileSdk 値で設定した最新の SDK を使用してビルドされています。 SD-1
バッテリー PS-B1 アプリは、Android 6.0 以上の電力管理機能(Doze とアプリ スタンバイ)を適切にサポートします。電力管理によって中核機能が妨げられる場合は、認定されたアプリのみが免除を要求できます。 BA-1
メディア PS-M1 音楽と動画の再生については、アプリの通常の使用時と読み込み時には、雑音や画面のちらつき、またはその他の不具合を発生させずにスムーズに実行します。 CR-allSD-1HA-1
視覚品質 PS-V1

アプリは、グラフィック、テキスト、画像、その他の UI 要素を著しい歪み、ぼやけ、ピクセル化なしで表示します。

  1. アプリは、サポート対象のすべての画面サイズとフォーム ファクタで高品質グラフィックを表示します。
  2. メニュー、ボタン、その他の UI 要素の境界部にエイリアシングは表示されません。
CR-all
PS-V2

アプリは、テキストとテキスト ブロックを次の許容可能な状態で表示します。

  1. サポートされるすべてのフォーム ファクタで適切なレイアウトで表示されます。
  2. 文字または語句は切り捨てられて表示されることはありません。
  3. ボタンまたはアイコン内で不適切に改行されて表示されることはありません。
  4. テキストと周囲の要素との間に十分なスペースを配置します。

セキュリティ

アプリがユーザーのデータと個人情報を安全に取り扱うことを保証するための基準を以下に示します。

Google Play ストアで公開するアプリは、このチェックリストに加え、ユーザー データ ポリシーに従ってユーザーのプライバシーを保護しなければなりません。

分野 ID 説明 テスト
データ SC-D1 すべてのプライベート データはアプリの内部ストレージに格納します。 SC-1
SC-D2 外部ストレージからのすべてのデータはアクセスする前に検証します。 SC-2
SC-D3

すべてのインテントとブロードキャストはセキュリティに関する次のベスト プラクティスに従います。

  1. 宛先アプリが既知の場合、インテントは明示的です。
  2. インテントは適切なパーミッションを強制し、使用します。
  3. データとペイロードを含むインテントは使用する前に検証します。
SC-D4 個人情報または機密性の高いユーザーデータをシステムログやアプリ固有のログに記録しません。 SC-10
アプリのコンポーネント SC-P1

アプリは、データを他のアプリと共有するコンポーネントまたは他のアプリから呼び出される必要のあるコンポーネントだけをエクスポートします。

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

アプリのいずれかのコンポーネントをエクスポートするかどうかにかかわらず、常に android:exported 属性を明示的に設定します。

SC-5
SC-P2 他のアプリとコンテンツを共有するアプリ コンポーネントは、適切なパーミッションを定義し、強制します。これにはアクティビティサービスブロードキャスト レシーバが含まれますが、特にコンテンツ プロバイダはこれに当たります。 SC-4
SC-P3 複数のアプリ間でコンテンツを共有するすべてのコンテンツ プロバイダは android:protectionLevel="signature" を使用します。 SC-3
ネットワーク SC-N1 すべてのネットワーク トラフィックは SSL で送信されます。 SC-9
SC-N2 アプリはネットワーク セキュリティ構成を宣言します。
SC-N3 アプリが Google Play サービスを使用する場合、アプリのスタートアップ時にセキュリティ プロバイダを初期化します。
ライブラリ SC-U1 すべてのライブラリ、SDK、依存関係は最新です。
WebView SC-W1 すべての WebView で JavaScript を無効にしています(必要な場合は除く)。 SC-6
SC-W2 WebView には、可能な場合、ホワイトリストに登録されたコンテンツのみを読み込みます。 SC-8
SC-W3

WebView では 信頼できないコンテンツに対する addJavaScriptInterface() を使用しません。

Android M 以上では、代わりに HTML メッセージ チャネルを使用することができます。

SC-7
実行 SC-E1 アプリは、アプリの APK の外部からコードを動的に読み込むことはしません。
暗号化 SC-C1 アプリは、プラットフォームで提供される強力な暗号化アルゴリズムを使用し、カスタム アルゴリズムを実装することはしません。
SC-C2 アプリは、特に暗号化キーを初期化する場合などに、安全な乱数ジェネレータを適切に使用します。

Google Play

アプリが Google Play に公開するレベルに達していることを保証する基準を次に示します。

分野 ID 説明 テスト
ポリシー GP-P1 アプリは、Google Play デベロッパー コンテンツ ポリシーの条項に厳密に従い、不適切なコンテンツを提供しません。また、他者の知的財産やブランドなども使用しません。 GP-all
GP-P2

アプリは、コンテンツの評価に関するガイドラインに基づいて、アプリユーザーの対象年齢(成熟度)を適切に設定します。

GP-1
GP-P3

アプリは、Android 6.0 以上の電力管理機能(Doze とアプリ スタンバイ)を適切にサポートします。電力管理によって中核機能が妨げられる場合は、認定されたアプリのみが免除を要求できます。Doze とアプリ スタンバイのその他のユースケースのサポートをご覧ください。

GP-4
アプリの詳細ページ  GP-D1

アプリのメイン ビジュアルは、このブログ投稿で示すガイドラインに従っています。次の点を確認してください。

  1. アプリの掲載情報には高品質なメイン ビジュアルが含まれています。
  2. メイン ビジュアルは、縮小表示され、アプリがターゲットにしている最小画面サイズで表示されるときに、判別できなくなるデバイス画像、スクリーンショット、小さいテキストは含まれません。
  3. メイン ビジュアルは、広告と混同しそうなデザインを避けています。
GP-1GP-2
GP-D2 アプリのスクリーンショットと動画は Android 以外の端末を表示または参照しません。 GP-1
GP-D3 アプリのスクリーンショットや動画は、そのアプリのコンテンツとエクスペリエンスに関して、誤解を招く表現を含んでいません。
ユーザーのサポート GP-X1 Google Play ページのレビューのタブにある、ユーザーによってレポートされた一般的なバグが、再現可能で異なる多くのデバイスで発生する場合、これらのバグに対処します。ごく少数の端末でのみ発生するバグでも、その端末が特に人気があるか、新しい端末である場合には、バグに対処します。 GP-1

テスト環境の設定

アプリの品質を評価するには、テスト用に適切なハードウェアまたはエミュレータ環境を設定する必要があります。

理想的なテスト環境には、利用者が現在使用できる重要なフォーム ファクタとハードウェア/ソフトウェアの組み合わせを表す実際のハードウェア デバイスがいくつか含まれます。市場に出回っているすべてのデバイスでテストする必要はありません。フォーム ファクタごとに少数のデバイスを使用して、代表的ないくつかのデバイスを重点的にテストします。

テスト用に実際のハードウェア デバイスを入手できない場合は、最も一般的なフォーム ファクタとハードウェア/ソフトウェアの組み合わせを表すエミュレーションされたデバイス(AVD)を設定する必要があります。

基本テスト以上のテストを行うために、より多くのデバイス、フォーム ファクタ、新しいハードウェア/ソフトウェアの組み合わせをテスト環境に追加できます。テストと品質基準の数または複雑度を上げることもできます。

テスト手順

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

タイプ テスト 説明
コアスイート CR-0

アプリのすべての部分(すべての画面、ダイアログ、設定、すべてのユーザー フロー)にナビゲートします。

  1. アプリで編集、コンテンツの作成、ゲームのプレイ、メディアの再生が可能になっている場合、これらのフローを開始して、コンテンツの作成や変更を行うようにしてください。
  2. アプリの実行中に、ネットワーク接続、バッテリー機能、GPS またはロケーションの利用可能性、システム ロードなどに一過性の変更を加えます。
CR-1 各アプリ画面でデバイスの [ホーム] キーを押して [すべてのアプリ] 画面からアプリを再起動します。
CR-2 各アプリ画面で別の実行中のアプリに切り替え、最近使ったアプリの切り替え機能を使用して、テスト中のアプリに戻ります。
CR-3 各アプリ画面(とダイアログ)で戻るボタンを選択します。
CR-5 各アプリ画面で横方向と縦方向の間でデバイスを 3 回以上回転します。
CR-6 別のアプリに切り替え、テスト対象アプリをバックグラウンドに送ります。[設定] に移動して、テスト アプリがバックグラウンドになっているときに、サービスが実行されているかどうか確認します。Android 4.0 以上では、[アプリ] 画面に進み、[実行] タブでアプリを見つけます。
CR-7 電源ボタンを押して端末をスリープ状態にし、次に電源ボタンをもう一度押して画面を復帰させます。
CR-8 電源ボタンを押したときにロックするように端末を設定します。電源ボタンを押して端末をスリープ状態にし、次に電源ボタンをもう一度押して画面を復帰させ、端末のロックを解除します。
CR-9 スライド式キーボードのあるデバイスの場合は、キーボードを 1 回以上スライドさせます。キーボード ドックのあるデバイスの場合は、そのキーボード ドックにデバイスを接続します。
CR-10 外部ディスプレイ ポートのあるデバイスの場合は外部ディスプレイを接続します。
CR-11 アプリが表示できるすべてのタイプの通知を通知ドロワーでトリガーさせ、監視します。可能な場合は通知を展開し(Android 4.1 以上)、示されるすべてのアクションをタップします。
SD カードへのインストール SD-1

端末の SD カード(アプリでサポートされている場合)にインストールされているアプリでコアスイートを繰り返します。

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

ハードウェア アクセラレーション HA-1

ハードウェア アクセラレーションを有効にしてコア スイートを繰り返します。

ハードウェア アクセラレーション(デバイスでサポートされている場合)を強制的に有効にするには、hardware-accelerated="true" をアプリのマニフェストの <application> に追加して再度コンパイルします。

パフォーマンスと安定性 SP-1 アプリが 利用可能な最新の SDKtargetSdk および compileSdk)に対してビルドされていることを確認するため、Android マニフェスト ファイルを確認して構成をビルドします。
パフォーマンスのモニタリング 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 デベロッパー コンソールにログインし、デベロッパーのプロフィール、アプリの説明、スクリーンショット、メイン ビジュアル、コンテンツ レーティング、ユーザーのフィードバックを確認します。
GP-2 メイン ビジュアルとスクリーンショットをダウンロードし、ターゲットにしているデバイスとフォーム ファクタのディスプレイ サイズに合致するよう縮小します。
GP-3 アプリまたは拡張ファイル ダウンロードに含まれているグラフィック アセット、メディア、テキスト、コード ライブラリ、その他のコンテンツをすべて確認します。
GP-4 Doze とアプリ スタンバイのその他のユースケースのサポートを確認します。
課金 GP-4 アプリのすべての画面にナビゲートし、すべてのアプリ内購入フローを開始します。

StrictMode を使用したテスト

パフォーマンスのテストの場合、アプリで StrictMode を有効にしてこれを使用することをお勧めします。これで、メインスレッドおよびパフォーマンス、ネットワーク アクセス、ファイルの読み取り/書き込みなどに影響する可能性のあるその他のスレッド上のオペレーションを捕捉できます。

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

penaltyFlashScreen() を使用して ThreadPolicy に対するポリシー違反の視覚通知を有効にします。