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

APK をアップロードする際は、Google Play の対象 API レベルの要件を満たしている必要があります。新規アプリとアプリのアップデートは、Android 10(API レベル 29)以降を対象にする必要があります。ただし、API レベル 28 を対象にする必要がある Wear OS アプリは除きます。

2021 年 8 月以降、新しいアプリは次の要件を満たす必要があります。

  • Android App Bundle 形式で公開する。
  • ダウンロード サイズが 150 MB を超えるアセットまたは機能を配信する場合は、Play Asset Delivery または Play Feature Delivery を使用する。新しいアプリでは、拡張ファイル(OBB)はサポートされなくなります。
  • API レベル 30(Android 11)以上を対象とし、動作変更に対応する(ただし、引き続き API レベル 28 を対象にする必要がある Wear OS アプリは除きます)。

2021 年 11 月から、アプリのアップデートは API レベル 30 以上を対象とし、Android 11 での動作変更に合わせて調整する必要があります。アップデートが行われていない既存のアプリは影響を受けず、今後も Play ストアからダウンロードできます。Wear OS アプリは、引き続き API レベル 28 を対象とする必要があります。

Android App Bundle への移行は、以前の Instant App ZIP 形式を使用した Instant 版にも影響します。2021 年 8 月以降、新しい Instant 版と既存の Instant 版の更新には、Instant 対応 App Bundle を公開する必要があります。

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

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

最新の API レベルを対象にするようアプリを設定することで、ユーザーに機能強化のメリットを提供しつつ、古い Android バージョン上でもアプリを動作させることができます。また、最新の API レベルをアプリの対象に設定することで、プラットフォームの最新機能を活用して、魅力的なユーザー エクスペリエンスを提供することもできます。さらに、Android 10(API レベル 29)では、アプリが Android 5.1(API レベル 22)以下を対象としている場合、アプリの初回起動時に、ユーザーに警告が表示されます。

このドキュメントでは、対象 API レベルを更新し、Google Play の要件を満たすために知っておくべき重要事項を説明します。

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

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

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

Android 10(API レベル 29)未満から移行する

移行元の 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、シリアル番号など、リセットできない ID へのアクセスが制限されます。
    • ユーザーの歩数など、身体活動に関する情報へのアクセスが制限され、ACTIVITY_RECOGNITION 権限が必要となります。
    • 一部の電話、Bluetooth、Wi-Fi API へのアクセスが制限され、ACCESS_FINE_LOCATION 権限が必要となります。
    • Wi-Fi 設定へのアクセスが制限されます。

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

アプリをモダナイズする

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

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

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

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

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

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

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

アプリをテストする

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

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

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

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

追加情報

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