Google Play の対象 API レベルの要件を満たす

APK をアップロードする際は、Google Play の対象 API レベルの要件を満たしている必要があります。Google Play の要件が変更され、新規アプリについては 2019 年 8 月 1 日から、アプリのアップデートについては 2019 年 11 月 1 日から、アプリの対象を Android 9.0(API レベル 28)以上に設定する必要があります。それまでは、新規アプリもアプリのアップデートも Android 8.0(API レベル 26)以上を対象としてください。

新しい Android バージョンが登場するたびに、セキュリティとパフォーマンスが大幅に改善され、Android 全体のユーザー エクスペリエンスが向上します。このような変更の一部は、targetSdkVersion マニフェスト属性(別名、対象 API レベル)を通じて、明示的にサポートを宣言しているアプリに限り適用されます。

最新の API レベルを対象にするようアプリを設定することで、ユーザーに機能改善のメリットを提供しつつ、古い Android バージョン上でもアプリを動作させることができます。また、最新の API レベルをアプリの対象に設定することで、プラットフォームの最新機能を活用して、魅力的なユーザー エクスペリエンスを提供することもできます。

このドキュメントでは、Google Play の要件を満たすよう対象 API レベルを更新する際に、知っておくべき重要なポイントについて説明します。続行するには、アプリの現在の API レベルをクリックしてください。

注: Gradle ファイルにマニフェスト エントリが含まれている場合は、アプリの Gradle ファイル内で targetSdkVersion の現在の値を確認、変更できます(ビルドの設定の説明をご覧ください)。または、マニフェスト ファイル内で android:targetSdkVersion 属性を使用することもできます(<uses-sdk> マニフェスト要素に関するドキュメントをご覧ください)。

Android 5.0(API レベル 21)よりも前

以下に示す各リリースの動作の変更点に関するページをそれぞれ参照して、各リリースで導入された変更点に対応するようにアプリを設定してください。

次のセクションの手順に沿って、設定を続行します。

Android 6.0(API レベル 23)よりも前

Android 6.0 以上のプラットフォーム バージョンを対象とするアプリの場合、以下の項目について検討します。

  • ランタイム権限
    • 危険な権限が付与されるのは、ランタイムに限られます。UI フロー内で、このような権限を付与する際に、はっきり表示する必要があります。
    • 可能な限り、権限リクエストを拒否された場合に対応できるように、アプリを準備しておく必要があります。たとえば、デバイスの GPS にアクセスするリクエストがユーザーによって拒否された場合、アプリは別の方法で処理を進める必要があります。

Android 6.0(API レベル 23)で導入された変更点の一覧については、対象プラットフォーム バージョンの動作の変更点に関するページをご覧ください。

次のセクションの手順に沿って、設定を続行します。

Android 7.0(API レベル 24)よりも前

Android 7.0 以上のプラットフォーム バージョンを対象とするアプリの場合、以下の項目について検討します。

  • Doze とアプリ スタンバイ

    Doze とアプリ スタンバイ用に最適化する記事で説明されている動作に合わせて設計する必要があります。これにより、複数のプラットフォーム リリースで順次導入された変更点に対応できます。

    デバイスが Doze モードやアプリ スタンバイ モードになると、システムは次のように動作します。

    • ネットワーク アクセスを制限します。
    • アラーム、同期、ジョブを延期します。
    • GPS と Wi-Fi スキャンを制限します。
    • 優先度が標準の Firebase Cloud Messaging メッセージを制限します。
  • 権限の変更
    • アプリのプライベート ディレクトリへのアクセスは制限されます。
    • アプリの外部に file:// URI が公開されると、FileUriExposedException がトリガーされます。アプリの外部でファイルを共有する必要があるデベロッパーは、FileProvider を実装する必要があります。
  • 非 NDK ライブラリへのリンクは禁止されます。

Android 7.0(API レベル 24)で導入された変更点の一覧については、対象プラットフォーム バージョンの動作の変更点に関するページをご覧ください。

次のセクションの手順に沿って、設定を続行します。

Android 8.0(API レベル 26)よりも前

Android 8.0 以上のプラットフォーム バージョンを対象とするアプリの場合、以下の項目について検討します。

  • バックグラウンドでの実行の制限
    • フォアグラウンドで動作していないアプリのサービスは制限されます。
    • 非明示的ブロードキャスト
      • 非明示的ブロードキャストは制限されます。バックグラウンド イベントの処理については、JobScheduler API に関するドキュメントをご覧ください。
    • バックグラウンドでの位置情報の制限
      • バックグラウンドで実行されるアプリは、位置情報へのアクセスが制限されます。

  • 通知チャネル
    • チャネルごとに通知割り込みプロパティを定義する必要があります。
    • 通知を表示するには、チャネルに通知を割り当てる必要があります。
    • このバージョンのプラットフォームでは NotificationCompat.Builder がサポートされています。
  • プライバシー
    • ANDROID_ID は、各アプリ署名鍵を対象範囲とします。

Android 8.0(API レベル 26)で導入された変更点の一覧については、対象プラットフォーム バージョンの動作の変更点に関するページをご覧ください。

次のセクションの手順に沿って、設定を続行します。

Android 9.0(API レベル 28)よりも前

Android 9.0(API レベル 28)で導入された変更点の一覧については、動作の変更点に関するページをご覧ください。

アプリをモダナイズする

アプリの対象 API レベルを更新するにあたり、最新のプラットフォーム機能を採用してアプリをモダナイズし、ユーザー エクスペリエンスを高めることを検討してください。

  • Google Cloud Messaging(GCM)から Firebase Cloud Messaging の最新版にアプリを移行します。
  • 高度なウィンドウ管理機能を活用します。
  • 最新のカメラサポートを使用します。
    • Camera2 API を使用して、カメラを最大限に活用します。
    • Pixel 2 デバイスで HDR+ 処理を高速化するには、Pixel Visual Core を有効にします。

SDK とライブラリを確認して更新する

サードパーティ SDK の依存関係が API 26 に対応していることを確認します。SDK プロバイダによっては、依存関係をマニフェスト内公開しています。公開されていない場合は、さらに調べて確認します。API 26 をサポートしていない SDK を使用する場合は、最優先事項として、SDK プロバイダと協力してこの問題を解決してください。

また、開発するアプリやゲームの targetSdkVersion によっては、Android プラットフォームのプライベート ライブラリへのアクセスが制限されることがあります。詳しくは、プラットフォーム ライブラリにリンクした NDK アプリについての説明をご覧ください。

また、使用している Android Support Library のバージョンに制限があるかどうか確認する必要があります。通常のように、Android Support Library のメジャー バージョンとアプリの compileSdkVersion との互換性を確保する必要があります。

Support Library のメジャー バージョン以下の targetSdkVersion を選択することをおすすめします。最新の互換性機能とバグ修正を利用するために、互換性のある最新の Support Library にアップデートすることをおすすめします。

アプリをテストする

アプリの API レベルと機能を適切に更新したら、主要なユースケースをいくつかテストする必要があります。以下の推奨事項ですべてが網羅されるわけではありませんが、テストプロセスのガイドとしてご覧ください。次のようなテストをおすすめします。

  • エラーや警告なしにアプリを API 26 にコンパイルできるかどうか。
  • ユーザーが権限リクエストを拒否した場合にアプリが対応できるかどうか。ユーザーに権限の許可を求めるプロンプトが表示されるかどうか。手順は次のとおりです。
    • アプリの [アプリ情報] 画面に移動し、各権限を無効にします。
    • アプリを開いて、クラッシュしないことを確認します。
    • 主要なユースケースをテストして、必要な権限について再度プロンプトが表示されるかどうかを確認します。

  • エラーなく想定どおりの結果で Doze を処理できるかどうか。
    • adb を使用して、アプリの実行中にテストデバイスを Doze モードにします。
      • Firebase Cloud Messaging メッセージをトリガーするユースケースをテストします。
      • アラームやジョブを使用するユースケースをテストします。
      • バックグラウンド サービスに対する依存関係を排除します。
    • アプリをアプリ スタンバイ モードに設定します。
      • Firebase Cloud Messaging メッセージをトリガーするユースケースをテストします。
      • アラームを使用するユースケースをテストします。

  • 撮影中の新しい写真や動画を処理できるかどうか。
  • 他のアプリとのファイルの共有を処理できるかどうか。
    • ファイルデータを他のアプリと共有するユースケースをテストします(同じデベロッパーの別アプリでもテストします)。
    • 他のアプリ内でコンテンツを表示できるか、表示したときにクラッシュしないかどうかをテストします。

追加情報

Google から Android や Google Play に関する重要なアップデートやお知らせ(月次パートナー ニュースレターなど)が届くように、Google Play Console でメールを受信できるように設定してください。