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

アップロードする APK は、Google Play の対象 API レベルの要件を満たしている必要があります。

2023 年 8 月 31 日以降:

  • 新規のアプリは Android 13(API レベル 33)以降を対象にする必要があります。ただし、Wear OS アプリは Android 11(API レベル 30)から Android 13(API レベル 33)までのバージョンを対象にする必要があります。

  • アプリのアップデートは Android 13 以降を対象とし、Android 13 での動作変更に合わせて調整する必要があります。ただし、Wear OS アプリは Android 11 を対象にする必要があります。

永続的な限定公開アプリ(特定の組織のユーザーのみに公開される内部配布専用のもの)は、対象 API レベルの要件を満たす必要はありません。

新しい SDK をターゲットにする理由

Android のバージョンが上がるごとに、セキュリティとパフォーマンスが改善され、Android のユーザー エクスペリエンスが向上します。これらの変更の一部は、targetSdkVersion マニフェスト属性(対象 API レベルとも呼ばれます)を通じてサポートを明示的に宣言するアプリにのみ適用されます。

最新の API レベルを対象にするようアプリを構成すると、古いバージョンの Android でもアプリを実行しながら、こうした改善の恩恵を受けることができます。また、最新の API レベルをアプリの対象に設定することで、プラットフォームの最新機能を活用して、魅力的なユーザー エクスペリエンスを提供することもできます。さらに、Android 10(API レベル 29)以降では、アプリが Android 5.1(API レベル 22)以下を対象としている場合、ユーザーが初めてアプリを起動したときに警告が表示されます

このドキュメントでは、Google Play の要件を満たすように対象 API レベルを更新する際に知っておくべき重要なポイントについて説明します。移行先のバージョンに応じて、次のセクションの手順をご覧ください。

Android 12(API レベル 31)から Android 13(API レベル 33)に移行する

アプリを更新して Android 13 を対象とするには、動作変更のリストに沿って対応してください。

Android 11(API レベル 30)から Android 12(API レベル 31)に移行する

セキュリティと権限

ユーザー エクスペリエンス

  • カスタム通知: カスタム コンテンツ ビューを含む通知では、通知領域全体が使用されなくなり、代わりに標準テンプレートが適用されます。このテンプレートを使用すると、カスタム通知はすべての状態の他の通知と同じ装飾になります。この動作は、Notification.DecoratedCustomViewStyle の動作とほぼ同じです。
  • Android アプリリンクの検証に関する変更: Android アプリリンクの検証を使用する場合、インテント フィルタに BROWSABLE カテゴリが含まれ、HTTPS スキームをサポートしていることを確認してください。

パフォーマンス

  • フォアグラウンド サービスの起動に関する制限: Android 12 以上をターゲットとする場合、いくつかの特殊なケースを除き、バックグラウンドで実行中のアプリはフォアグラウンド サービスを開始できません。アプリがバックグラウンドで動作中にフォアグラウンド サービスを開始しようとすると、例外が発生します(いくつかの特殊なケースを除きます)。

    アプリがバックグラウンドで動作しているときに、WorkManager を使用して優先処理をスケジュールして開始することを検討してください。ユーザーがリクエストする時間的制約のあるアクションを完了するには、正確なアラーム内でフォアグラウンド サービスを開始します。

  • 通知トランポリンの制限: ユーザーが通知をタップすると、一部のアプリは、ユーザーが表示して操作するアクティビティを開始するアプリ コンポーネントを起動することで応答します。このアプリ コンポーネントは通知トランポリンと呼ばれます。

    アプリは、通知トランポリンとして使用されるサービスまたはブロードキャスト レシーバからアクティビティを開始してはなりません。ユーザーが通知内の通知ボタンまたはアクション ボタンをタップした後、アプリはサービスまたはブロードキャスト レシーバ内で startActivity() を呼び出すことはできません。

Android 12(API レベル 31)をターゲットとするアプリに影響する変更の全リストをご確認ください。

Android 11(API レベル 30)未満から移行する

移行元の Android バージョンを以下から選択してください。

Android 5(API レベル 21)に移行する

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

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

Android 6(API レベル 23)に移行する

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

  • ランタイム権限

    • 危険な権限が付与されるのは、ランタイムに限られます。UI フロー内で、このような権限の付与に関する情報を提供する必要があります。

    • 可能な限り、権限リクエストを拒否された場合にアプリが対応できるように準備しておく必要があります。たとえば、デバイスの GPS にアクセスするリクエストをユーザーが拒否した場合、アプリが別の方法で処理を進められるようにします。

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

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

Android 7(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(API レベル 26)に移行する

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

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

Android 8(API 26)から Android 9(API 28)に移行する

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

Android 9(API レベル 28)から Android 10(API レベル 29)に移行する

  • 全画面インテントを使用した通知
    • 通常の権限 USE_FULL_SCREEN_INTENT(実行時の権限ではない)をリクエストする必要があります。
  • 折りたたみ式デバイスと大画面デバイスのサポート
    • 複数のアクティビティを同時に「再開」状態にできるようになりましたが、実際にフォーカスされるのは 1 つのみです。
      • この変更は、onResume()onPause() の動作に影響します。
      • onTopResumedActivityChanged() をサブスクライブすることで検出できる「最上位の再開」という新しいライフサイクル コンセプト。
        • 「一番に再開」できるアクティビティは 1 つのみです。
    • resizeableActivityfalse に設定されている場合、アプリは minAspectRatio も指定できます。これにより、狭いアスペクト比でアプリが自動的にレターボックス表示されます。
  • プライバシーに関する変更点
    • 対象範囲別ストレージ
      • 外部ストレージへのアクセスは、アプリ固有のディレクトリと、アプリが作成した特定のタイプのメディアのみに制限されます。
    • アプリがバックグラウンドで動作しているときに位置情報へのアクセスを制限し、ACCESS_BACKGROUND_LOCATION 権限を必要とする。
    • IMEI やシリアル番号など、リセットできない識別子へのアクセスの制限。
    • ユーザーの歩数など、身体活動情報へのアクセスが制限され、ACTIVITY_RECOGNITION 権限が必要です。
    • 一部の電話、Bluetooth、Wi-Fi の API へのアクセスが制限され、ACCESS_FINE_LOCATION 権限が必要です。
    • Wi-Fi 設定へのアクセスの制限

Android 10(API レベル 29)から Android 11(API レベル 30)に移行する

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

次に、上記のセクションの手順に沿って API 31 への更新を行います。

アプリをモダナイズする

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

  • カメラを最大限に活用するために、ベータ版の CameraX の使用を検討してください。
  • Jetpack コンポーネントを使用すると、おすすめの方法に沿って開発を進めながら、ボイラープレート コードを作成する手間を省き、複雑なタスクを簡素化できるので、コードの重要な部分に集中できます。
  • Kotlin を使用すると、アプリの質を高め、コードと作成時間を削減できます。
  • 以下のプライバシーに関する要件とおすすめの方法に沿っているかどうかを確認します。
  • アプリにダークモードのサポートを追加します。
  • アプリにジェスチャー ナビゲーションのサポートを追加します。
  • Google Cloud Messaging(GCM)から最新バージョンの Firebase Cloud Messaging にアプリを移行します。
  • 高度なウィンドウ管理を活用します。

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

サードパーティ SDK の依存関係が API 31 をサポートしていることを確認します。SDK プロバイダによっては、マニフェストで公開している場合もあれば、追加調査が必要になる場合もあります。API 31 をサポートしていない SDK を使用する場合は、SDK プロバイダと協力して問題を解決することをおすすめします。

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

また、使用している Android サポート ライブラリのバージョンに制限があるかどうかも確認してください。通常どおり、Android サポート ライブラリのメジャー バージョンとアプリの compileSdkVersion の間の互換性を確保する必要があります。

サポート ライブラリのメジャー バージョン以下の targetSdkVersion を選択することをおすすめします。最新の互換性機能とバグ修正を利用するために、互換性のある最新のサポート ライブラリに更新することをおすすめします。

アプリをテストする

アプリの API レベルと機能を適宜更新したら、主要なユースケースをいくつかテストする必要があります。次の推奨事項は網羅的なものではありませんが、テストプロセスのガイドとして役立ちます。次のようなテストをおすすめします。

  • エラーや警告なしでアプリが API 29 にコンパイルできるかどうか。
  • ユーザーが権限リクエストを拒否した場合に対応する戦略がアプリに用意されており、ユーザーに権限を求めるプロンプトが表示される。手順は以下のとおりです。

    • アプリの [アプリ情報] 画面に移動し、各権限を無効にします。
    • アプリを開いて、クラッシュが発生しないことを確認します。
      • コア ユースケースのテストを行い、必要な権限が再入力されることを確認する。
  • エラーなく想定どおりの結果で Doze を処理できるかどうか。

    • adb を使用して、アプリの実行中にテストデバイスを Doze モードにします。
      • Firebase Cloud Messaging メッセージをトリガーするユースケースをテストします。
      • アラームやジョブを使用するユースケースをテストします。
      • バックグラウンド サービスに対する依存関係を排除します。
    • アプリをアプリ スタンバイに設定します。
      • Firebase Cloud Messaging メッセージをトリガーするユースケースをテストします。
      • アラームを使用するユースケースをテストします。
  • 撮影中の新しい写真や動画の処理

    • アプリが制限付きの ACTION_NEW_PICTURE ブロードキャストと ACTION_NEW_VIDEO ブロードキャストを正しく処理する(つまり、JobScheduler ジョブに移行する)ことを確認します。
    • これらのイベントに依存する重要なユースケースが引き続き機能することを確認します。
  • 他のアプリとのファイル共有の処理 - 他のアプリ(同じデベロッパーの別のアプリを含む)とファイルデータを共有するユースケースをテスト

    • コンテンツがもう一方のアプリに表示され、クラッシュが発生しないかどうかをテストします。

追加情報

Google Play Console でメール配信にオプトインすると、Android と Google Play に関する重要なアップデートやお知らせ(月次パートナー ニュースレターなど)を受け取れます。