Android 6.0 では、アプリを次期バージョンのプラットフォームで動作させることができます。このリリースには、API の概要と動作の変更点に記載されているとおり、アプリに影響する可能性がある API と動作変更が多数含まれています。このリリースでアプリをテストする際は、ユーザー エクスペリエンスを向上させるために、特に注意すべきシステム変更がいくつかあります。
このガイドでは、アプリで Android 6.0 の機能をテストする内容と方法について説明します。これらの機能はアプリの動作に大きく影響する可能性があるため、優先的にテストする必要があります。
権限のテスト
新しい権限モデルでは、ユーザーが権限をアプリに割り当てる方法が変わります。アプリは、インストール手順ですべての権限を付与するのではなく、実行時に個別の権限をリクエストする必要があります。この動作により、ユーザーは各アプリのアクティビティをより細かく制御できるだけでなく、アプリが特定の権限をリクエストする理由を理解しやすくなる可能性があります。ユーザーは、アプリに付与された権限をいつでも個別に付与または取り消すことができます。このリリースの機能はアプリの動作に影響を与える可能性が最も高く、アプリの一部の機能が動作しなくなることや、機能が限定された状態で動作する可能性があります。
この変更は、新しいプラットフォームで実行されているすべてのアプリ(新しいプラットフォーム バージョンをターゲットとしていないアプリを含む)に影響します。プラットフォームでは、従来のアプリに対して限定的な互換性動作が用意されていますが、公式プラットフォームのリリース時にアプリのアップデート バージョンを公開することを目標として、今すぐ新しい権限モデルへのアプリの移行を計画してください。
テストのヒント
以下のテストのヒントを参考に、新しい権限の動作を使用したアプリのテストを計画し、実行してください。
- アプリの現在のパーミッションと関連コードパスを確認します。
- 権限で保護されているサービスやデータでユーザーフローをテストします。
- 付与された権限と取り消された権限のさまざまな組み合わせでテストします。
- コマンドラインから権限を管理するには、
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 など、デバイス固有の識別子を内部ストレージに保持している場合は、自動バックアップでユーザーデータをバックアップするで説明されているように、ベスト プラクティスに沿って自動バックアップからストレージの場所を除外してください。