本文へスキップ
アプリのアップデート

Google PlayのターゲットAPIレベル36対応:2026年11月1日までの延長と、Expo・Flutter・React Nativeでの修正方法

8月31日の期限に間に合わなかった場合でも、2026年11月1日までの延長で何ができるかを確認し、戻る操作やレイアウトを壊さずにExpo・Flutter・React NativeをAPI 36へ移行しましょう。

結論

ターゲットAPIレベル36の要件により、2026年8月31日以降、Google Playに送信するすべての新規アプリとアプリのアップデートはAndroid 16(API 36)をターゲットにする必要があります。ポリシー警告を受けたアプリのデベロッパーは、ポリシーステータスページから2026年11月1日までの延長をリクエストできました。延長期間が終わると、targetSdk 36のビルドをアップロードするまでPlayはアップデートをブロックします。Expo SDK 54以降、Flutter 3.38以降、React Native 0.81以降はデフォルトでAPI 36をターゲットにしています。

要点
  • 2026年8月31日以降、Google Playの新規アプリとアプリのアップデートはAndroid 16(APIレベル36)をターゲットにする必要があります。Wear OSとAutomotiveはAPI 35、Android TVとXRはAPI 34が必要です。
  • 延長は2026年11月1日までです。申請フォームのリンクは、Play Consoleの通知と、ポリシーステータス内の該当警告のページから要件未対応のアプリに届きます。
  • 既存のスマートフォン向けアプリがAPI 35以上をターゲットにしていれば、新規ユーザーも引き続き利用できます。期限を過ぎて止まるのはアップデートであり、現在の掲載ではありません。
  • Expo SDK 54(React Native 0.81)とFlutter 3.38はデフォルトでAPI 36をターゲットにします。数値を手で書き換えるより、アップグレードのほうが通常はうまくいきます。
  • API 36をターゲットにすると、AndroidはonBackPressedを呼ばなくなり、幅600dp以上の画面では画面の向きの固定を無視します。アップロード前に戻る操作とタブレットのレイアウトをテストしてください。
API 36対応か、更新停止か

Google PlayのターゲットAPIレベル36の要件により、Android 16未満を対象にビルドしたリリースは公開できなくなりました。2026年10月時点で、Playはそれより低いレベルをターゲットにした新規アプリとアップデートをすべて拒否し、多くの場合 Target SDK of artifact is too low というメッセージが表示されます。ポリシー警告を受けたアプリは猶予を申請できましたが、その延長も2026年11月1日で終わります。このガイドでは、延長で今なお得られるもの、Expo・Flutter・React NativeをAPI 36へ移行する方法、そして移行後に壊れやすい箇所を解説します。

ターゲットAPIレベル36の要件で、実際に何がブロックされるのか?

ブロックされるのは送信です。2026年8月31日以降、API 36をターゲットにしていない限り、スマートフォン向けの新規アプリやアップデートはアップロードできません。すでに公開済みでAPI 35以上をターゲットにしているアプリは、新規ユーザーを含めて引き続き完全に利用可能です。

GoogleのターゲットAPIレベルの要件には「新規アプリとアプリのアップデートをGoogle Playに送信するには、Android 16(APIレベル36)以上をターゲットにする必要があります」とあります。要件はフォームファクタごとに異なり、完全な例外は、1つの組織内での内部配布を目的とした恒久的な非公開アプリだけです。

フォームファクタ新規アプリとアップデート(2026年8月31日以降)既存アプリが完全に利用可能であり続けるターゲット
スマートフォン、タブレット、Android AutoAPI 36API 35以上
Wear OSAPI 35API 34以上
Android Automotive OSAPI 35API 32以上
Android TVAPI 34API 33以上
Android XRAPI 34API 34以上

これらのレベルを下回る既存アプリは、「アプリのターゲットAPIレベルと同じか、それより低いAndroid OSを搭載したデバイスでのみ利用可能」になります。すでにインストール済みのユーザーはこれまでどおり使い続けられます。ただし、新しいスマートフォンのユーザーには、このアプリは「古いバージョンのAndroid向けに作られています」と表示されます。

2026年11月1日より前に、まだ延長を受けられるのか?

Playからアプリにポリシー警告が届いていて、申請フォームがまだ表示されている場合に限ります。その場合でも延長は最長で2026年11月1日までなので、ほぼ完成した修正のための数日の猶予であって、新たな計画を立てるための時間ではありません。

Googleによると、対象アプリには「通知を通じて延長申請フォームのリンク」が送られ、フォームは「ポリシーステータスページの警告または問題の詳細ページから利用できます」。すでに要件を満たしているアプリにはフォームは表示されません。

  1. Play Consoleを開き、アプリを選択します。
  2. 受信トレイまたは通知でターゲットAPIレベルに関するメッセージを探します。あれば、そのリンクをたどります。
  3. 見つからない場合は、ポリシーステータスに移動し、ターゲットAPIレベルの警告または問題を開いて、詳細ページに延長申請フォームがあるか確認します。
  4. 影響を受けるすべてのアプリについてフォームに記入します。警告はアプリごとに出ています。
  5. 延長が認められるかどうかにかかわらず、2026年11月1日より前にAPI 36のビルドをアップロードする計画を立ててください。この日以降、アップデートにはAPI 36が必要です。

Expo・Flutter・React NativeをAPI 36に上げるには?

最もきれいな方法は、すでにAPI 36をターゲットにしているフレームワークのバージョン、つまりExpo SDK 54、React Native 0.81、Flutter 3.38にアップグレードすることです。まだアップグレードできない場合は数値を手動で上げることもできますが、その場合はAndroid 16の動作変更にも自分で対処する必要があります。

スタックデフォルトでAPI 36をターゲットにするバージョン数値の記述場所アップグレードできない場合の手動対応
Expo(マネージド / CNG)SDK 54(React Native 0.81)prebuildで生成。expo-build-propertiesで上書きexpo-build-propertiesプラグインで targetSdkVersion: 36 と compileSdkVersion: 36 を設定
React Native(ベア)0.81android/build.gradlecompileSdkとtargetSdkを36に設定し、マニフェストで予測型「戻る」をオプトアウト
Flutter3.38(flutter.targetSdkVersion = 36)android/app/build.gradle(.kts)ハードコードされた35を36または flutter.targetSdkVersion に置き換える

Expo。 SDK 54の変更履歴には、SDK 54とReact Native 0.81は「Android 16をターゲットにするようになった」とあります。npx expo install expo@^54.0.0 --fix でアップグレードし、npx expo-doctor@latest を実行します。Continuous Native Generationを使っている場合は、「以前のSDKバージョン用に生成したandroidとiosのディレクトリを削除」してください。SDK 53でも expo-build-properties プラグインで targetSdkVersion: 36 を設定することは試せますが、React Native 0.79はまだ onBackPressed で「戻る」を処理しているため、リリース前に次のセクションを読んでください。

Flutter。 Flutter 3.38のリリースノートでは、デフォルト値として flutter.compileSdkVersion(API 36)と flutter.targetSdkVersion(API 36)が挙げられ、「ビルドファイルではFlutter SDKが提供するAPIレベル変数を使用することを強く推奨」しています。3.38ではJava 17以上も必要です。アプリモジュールに targetSdk = 35 がハードコードされていると、Flutterをアップグレードしても変わらないので、ファイルを確認してください。

ベアReact Native。 android/build.gradle で compileSdkVersion と targetSdkVersion を36に設定します。0.81以降ならほぼこれで完了です。それより古いバージョンでは、AndroidManifest.xml の <application> に android:enableOnBackInvokedCallback="false" も追加してください。これがないと、ハードウェアの戻るボタンや戻るジェスチャーがJavaScript側のナビゲーションを素通りしてしまいます。

Android 16をターゲットにすると、何が壊れるのか?

最もよく壊れるのは、戻る操作と大画面のレイアウトです。API 36をターゲットにすると、Androidは onBackPressed を呼ばなくなり、エッジツーエッジのオプトアウトも認めず、幅600dp以上のディスプレイでは画面の向きとサイズ変更の制限を無視します。

GoogleのAndroid 16の動作変更のうち、クロスプラットフォームアプリにとって特に重要な変更は次のとおりです。

  • 予測型「戻る」:「onBackPressed は呼び出されず、KeyEvent.KEYCODE_BACK もディスパッチされなくなります」。android:enableOnBackInvokedCallback="false" の設定は一時的なオプトアウトです。
  • エッジツーエッジ: windowOptOutEdgeToEdgeEnforcement は「非推奨となり無効化」されたため、ヘッダーや下部のボタンがステータスバーやジェスチャーバーの下に隠れることがあります。
  • 大画面: 幅600dp以上のディスプレイでは screenOrientation、resizableActivity、アスペクト比の制限が無視され、縦向き専用のレイアウトが引き伸ばされることがあります。ゲームは対象外です。PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY は一時的なオプトアウトで、「APIレベル37をターゲットにすると適用されません」。
  • テキスト: elegantTextHeight が無視されるため、アラビア文字、タイ文字、タミル文字などいくつかの文字体系で行の高さが変わることがあります。
  • 健康センサー: BODY_SENSORS は READ_HEART_RATE などの細分化された健康関連の権限に置き換えられます。

API 36に移行したほかのデベロッパーは、どんな問題にぶつかったのか?

これまでの公開報告から見える問題は2種類です。エラーを出さずに戻るボタンの動作が変わってしまうものと、ライブラリの影響でPlayが受け取るバンドルのターゲットレベルがプロジェクトファイルの記述と食い違うものです。

Audius(React Native 0.79)。 プルリクエスト #14635 で、Audiusチームは、Androidバージョン1.5.186のアップロードが2回とも Target SDK of artifact is too low でGoogle Playに拒否されたと述べています。彼らはcompileSdkとtargetSdkを35から36に上げ、ビルドツールを36.0.0に設定し、「RN 0.79はAGP 8.8に固定されている」ため android.suppressUnsupportedCompileSdk=36 を追加しました。また、これがないと「戻る」が「React Navigationを素通りしてしまう」ため、enableOnBackInvokedCallback="false" も設定しました。その後、React Native 0.81に移行した後のPRでこのオプトアウトは削除されました。0.81は自前で OnBackPressedCallback を登録するためです。

あるFlutter 3.35.2アプリ。 Flutter issue #174516 では、デベロッパーがGradleとマニフェストでtargetSdk 36を設定したにもかかわらず、Play Consoleは依然として「Your bundle targets SDK 34, but uses a Play Core library that cannot be used with that version.」と報告しました。古い com.google.android.play:core:1.10.3 ライブラリを削除すると、R8の「Missing classes」エラーが発生しました。それを直すと、今度は「You can't rollout this release because it doesn't allow any existing users to upgrade to the newly added app bundles.」と表示されました。最終的には、ProGuardのkeepルールを追加し、minSdkを明示的に設定し、言語・画面密度・ABIの分割をオフにすることでバンドルが受理されましたが、その代償としてダウンロードサイズが大きくなりました。

共通の教訓は、Gradleの数値を変えるだけでは作業は終わらないということです。Audiusは実行時の動作を、Flutterのデベロッパーは Playがバンドルから読み取る値を変えてしまう依存関係を修正する必要がありました。設定ファイルだけでなく、ビルドした成果物を確認し、Android 16の実機でテストしてください。

API 36のビルドをアップロード前に確認するには?

リリースバンドルそのものからターゲットレベルを読み取り、そのバンドルを内部テストまたはクローズドテストのトラックに配信して、Android 16で戻る操作、インセット、タブレットのレイアウトを試します。リジェクトや本番環境のバグのほうが、これらの確認よりはるかに多くの時間を奪います。

実例:API 35をターゲットにしていて、もう1回アップデートが必要なExpo SDK 53アプリの場合。

  1. npx expo install expo@^54.0.0 --fix を実行し、続けて npx expo-doctor@latest を実行して、報告された問題をすべて修正します。
  2. プロジェクトでContinuous Native Generationを使っている場合は、古い android と ios フォルダを削除して再ビルドします。そうでない場合は、ネイティブ側のアップグレード変更を手動で適用します。
  3. リリース用AABをビルドします(例:eas build -p android --profile production)。
  4. bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersion でターゲットを確認します。36 と出力されるはずです。
  5. 内部テストにアップロードします。Android 16のスマートフォンで、ネストされたすべての画面で戻る操作を試し、ヘッダーや下部のボタンがシステムバーの下に隠れていないか確認し、タブレットまたはサイズ変更可能なエミュレータを回転させます。
  6. Android 16対応の修正に触れたリリースノートを付けて、本番環境に昇格させます。

テストを効率よく進めるには、Google Playクローズドテストガイドのテスター設定を利用し、アップデートの文面はリリースノートの例を参考にしてください。リリース作業を任せたい場合は、App Store申請サービスでPlay ConsoleとApp Store Connectの両ストアに$599で対応します。デベロッパーアカウントの登録料は別途必要です。

よくある質問

2026年11月1日のターゲットAPI延長期限を過ぎるとどうなりますか?

現在の掲載はそのまま残ります。API 35以上をターゲットにしたスマートフォン向けアプリは、既存ユーザーにも新規ユーザーにも引き続き提供されます。ただし、バンドルがAndroid 16(API 36)をターゲットにするまで、Play Consoleは緊急のバグ修正を含むあらゆる新しいリリースを拒否します。API 35未満のアプリは、そのAndroidバージョン以下を搭載したデバイスにしかインストールできません。

Wear OSやAndroid TVのアプリもAPI 36をターゲットにする必要がありますか?

いいえ。2026年10月時点で、Wear OSとAndroid Automotive OSの新規アプリとアップデートはAPI 35、Android TVとAndroid XRのアプリはAPI 34をターゲットにする必要があります。API 36が必要なのはスマートフォン、タブレット、Android Autoのアプリだけです。唯一の完全な例外は、1つの組織内で配布される恒久的な非公開アプリです。

Expo SDKをアップグレードせずにAPI 36をターゲットにできますか?

SDK 53では、expo-build-propertiesプラグインでtargetSdkVersionとcompileSdkVersionを36に設定でき、実際にそうしているデベロッパーもいます。しかし、SDK 53が使うReact Native 0.79は依然としてonBackPressedで戻る操作を処理しており、API 36ではAndroid 16がこれを呼び出さなくなります。そのため、enableOnBackInvokedCallbackをfalseに設定してオプトアウトする必要があります。公式にサポートされているのはSDK 54へのアップグレードです。

compileSdkVersionとtargetSdkVersionの違いは何ですか?

compileSdkVersionは、コードのコンパイルに使うAndroid APIのバージョンです。targetSdkVersionは、アプリがどのバージョンの動作を採用しているかをAndroidに伝えるもので、Google Playが要件として適用します。compileSdkはtargetSdkと同じかそれ以上である必要があるため、ターゲットを36にするにはAPI 36以降でコンパイルすることになります。たとえばExpo SDK 58は、37でコンパイルし36をターゲットにしています。

build.gradleを変更したのに、Play Consoleでまだ古いAPIレベルをターゲットにしていると表示されるのはなぜですか?

Playはソースファイルではなく、アップロードされたバンドルからターゲットレベルを読み取ります。別モジュールにハードコードされた値、古いプラグイン、古いPlay Coreのようなライブラリが、マージ後のマニフェストを変えてしまうことがあります。リリース用AABに対してbundletool dump manifestを実行して実際のtargetSdkVersionを確認し、古い成果物ではなく新しいビルドをアップロードしたことを確かめてください。

出典と参考資料

ポリシーは変わります。申請前に公式ドキュメントをご確認ください。

ビルドでも、アイデアでも。

アプリをゴールまで届けましょう。

アプリの公開を阻んでいるものを洗い出す、集中型の通話です。

通話を予約 ↗