Android 6.0 では、アプリを次期バージョンのプラットフォームで動作させることができます。このリリースには、API の概要と動作の変更点に記載されているように、アプリに影響する可能性がある API と動作変更がいくつか含まれています。このリリースでアプリをテストする場合、ユーザー エクスペリエンスが損なわれないように、注意が必要なシステムの変更点がいくつかあります。
このガイドでは、アプリで Android 6.0 の機能をテストする内容とその方法について説明します。これらの機能はアプリの動作に大きく影響する可能性があるため、優先的にテストする必要があります。
権限のテスト
新しい Permissions モデルにより、ユーザーが権限をアプリに割り当てる方法が変わります。インストール時にすべての権限を付与する代わりに、アプリは実行時に個別の権限をユーザーに求める必要があります。この動作により、ユーザーは各アプリのアクティビティをより詳細に制御できるだけでなく、アプリが特定の権限をリクエストする理由をより的確に把握できます。ユーザーは、いつでもアプリに個別に権限を付与または取り消すことができます。このリリースの機能は、アプリの動作に影響を与える可能性が最も高く、アプリの一部の機能が妨げられたり、デグレード状態で動作する可能性があります。
この変更は、新しいプラットフォームで実行されているすべてのアプリ(新しいプラットフォーム バージョンをターゲットとしていないアプリを含む)に影響します。プラットフォームでは、レガシーアプリに対して限定的な互換性動作が提供されますが、公式プラットフォームのリリース時にアプリのアップデート バージョンを公開することを目標に、新しい権限モデルへのアプリの移行を今すぐ計画する必要があります。
テストのヒント
以下のテストのヒントを参考に、新しい権限の動作を使用したアプリのテストを計画、実施してください。
- アプリの現在のパーミッションと関連コードパスを確認します。
- 権限で保護されているサービスやデータでユーザーフローをテストします。
- 付与された権限と取り消された権限のさまざまな組み合わせでテストします。
- コマンドラインから権限を管理するには、
adb
ツールを使用します。- グループごとに権限とステータスを一覧表示します。
adb shell pm list permissions -d -g
- 次の構文を使用して、1 つ以上の権限を付与または取り消します。
adb shell pm [grant|revoke] <permission.name> ...
- グループごとに権限とステータスを一覧表示します。
- アプリを分析して、パーミッションを使用しているサービスを特定します。
テスト戦略
権限の変更は、アプリの構造とデザインだけでなく、ユーザーに提供するユーザー エクスペリエンスとフローにも影響します。アプリの現在の権限の使用状況を評価し、提供する新しいフローの計画を開始する必要があります。プラットフォームの公式リリースでは互換性の動作が保証されていますが、これらの動作に依存せずに、アプリの更新を計画する必要があります。
アプリが実際に必要で、使用している権限を特定してから、権限で保護されたサービスを使用しているさまざまなコードパスを見つけます。これは、新しいプラットフォームでのテストとコード分析を組み合わせることで可能になります。テストでは、アプリの targetSdkVersion
を API レベル 23 に変更して、実行時の権限を重点的にオプトインする必要があります。
権限の取り消しと追加のさまざまな組み合わせをテストし、権限に依存するユーザーフローを特定します。依存関係が明確でない場合や論理的でない場合は、そのフローのリファクタリングまたはコンパートメント化を検討して依存関係を排除するか、権限が必要な理由を明確にする必要があります。
実行時の権限の動作、テスト、ベスト プラクティスの詳細については、システム権限の操作のデベロッパーをご覧ください。
Doze とアプリ スタンバイをテストする
Doze とアプリ スタンバイの省電力機能により、デバイスがアイドル状態のときや、アプリがフォーカスされていないときに、アプリが実行できるバックグラウンド処理の量が制限されます。システムがアプリに適用する制限には、ネットワーク アクセスの制限または禁止、バックグラウンド タスクの停止、通知の停止、ウェイク リクエストの無視、アラームなどがあります。これらの省電力最適化に従ってアプリが適切に動作することを確認するには、これらの低電力状態をシミュレートしてアプリをテストする必要があります。
アプリで Doze をテストする
アプリで Doze をテストするには:
- Android 7.0(API レベル 24)システム イメージを使用してハードウェア デバイスまたは仮想デバイスを設定します。
- デバイスを開発用 PC に接続してアプリをインストールします。
- アプリを実行してアクティブ状態のままにします。
- 次のコマンドを実行して、デバイスが Doze モードになるのをシミュレートします。
$ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step $ adb shell dumpsys deviceidle -h
- デバイスが再アクティブ化されたときのアプリの動作を観察します。デバイスが Doze モードを終了したときに正常に復帰することを確認してください。
アプリ スタンバイでアプリをテストする
アプリでアプリ スタンバイ モードをテストするには:
- Android 7.0(API レベル 24)システム イメージを使用してハードウェア デバイスまたは仮想デバイスを設定します。
- デバイスを開発用 PC に接続してアプリをインストールします。
- アプリを実行してアクティブ状態のままにします。
- 次のコマンドを実行して、アプリがスタンバイ モードになるをシミュレートします。
$ adb shell am broadcast -a android.os.action.DISCHARGING $ adb shell am set-idle <packageName> true
- 次のコマンドを使用して、アプリの復帰をシミュレートします。
$ adb shell am set-idle <packageName> false
- 復帰したときのアプリの動作を観察します。スタンバイ モードから正常に復帰することを確認してください。特に、アプリの通知とバックグラウンド ジョブが想定どおりに機能しているかどうかを確認する必要があります。
アプリとデバイス固有の識別子の自動バックアップ
アプリが Google Cloud Messaging の登録 ID などのデバイス固有の識別子を内部ストレージに保持している場合は、自動バックアップでユーザーデータをバックアップするで説明されているように、ベスト プラクティスに従って、その保存場所を自動バックアップから除外してください。