RORK LABEN
DEADLINE — 8月31日から、Google Play の新規アプリとアプリ更新はすべて Android 16(API レベル36)を対象にする必要があります。残り8日ですEXTENSION — 条件を満たす開発者は Play Console のフォームから11月1日までの延長を申請できます。申請そのものは締切前に済ませておく必要がありますEXISTING — 更新を出さない既存アプリも、新しい Android を載せた端末で新規ユーザーに見つけてもらうには最低 API レベル35 が必要です。静かに新規流入だけが止まる構造ですEXPO — Expo SDK 57 は React Native 0.85 から 0.86 への更新で、破壊的変更なしの1コマンド移行を狙った小さなリリースです。React は SDK 56 と同じ 19.2 のままですMEMORY — expo@57.0.9 が React Native 0.86.2 へ更新し、reanimated や worklets を読み込むアプリでメモリが大きく増える Hermes V1 の回帰を解消しましたPREBUILD — expo prebuild が既定でネイティブディレクトリを破棄して再生成するようになりました。API 36 対応で手を入れた設定と衝突しやすい部分ですDEADLINE — 8月31日から、Google Play の新規アプリとアプリ更新はすべて Android 16(API レベル36)を対象にする必要があります。残り8日ですEXTENSION — 条件を満たす開発者は Play Console のフォームから11月1日までの延長を申請できます。申請そのものは締切前に済ませておく必要がありますEXISTING — 更新を出さない既存アプリも、新しい Android を載せた端末で新規ユーザーに見つけてもらうには最低 API レベル35 が必要です。静かに新規流入だけが止まる構造ですEXPO — Expo SDK 57 は React Native 0.85 から 0.86 への更新で、破壊的変更なしの1コマンド移行を狙った小さなリリースです。React は SDK 56 と同じ 19.2 のままですMEMORY — expo@57.0.9 が React Native 0.86.2 へ更新し、reanimated や worklets を読み込むアプリでメモリが大きく増える Hermes V1 の回帰を解消しましたPREBUILD — expo prebuild が既定でネイティブディレクトリを破棄して再生成するようになりました。API 36 対応で手を入れた設定と衝突しやすい部分です
記事一覧/開発ツール
開発ツール/2026-08-23上級

Android 16 の予測型「戻る」を、8月31日までに直すか後回しにするか

targetSdk 36 では予測型「戻る」が既定で有効になり、onBackPressed が呼ばれなくなります。期限までに必要な作業と、切り離してよい作業を分ける判断と、opt-out を config plugin に置くまでを書きました。

Android 16predictive backExpo179React Native229config plugin4

プレミアム記事

targetSdkVersion を 36 に上げたあと、プレビュー画面で端から内側へスワイプしたときの見え方が変わっていました。画面が少し縮んで、後ろが覗く。Android 側の予測型「戻る」のアニメーションです。

そこまでは知っていた変更でした。手が止まったのは、その先です。プレビューから一覧へ戻るつもりの操作が、アプリの終了として扱われる場面がありました。

React Native 側の告知には「BackHandler は引き続き動作します」と書かれています。実際、BackHandler は動いていました。それでも戻る操作の結果は変わっていた。この二つが同時に成り立つ理由を理解するまでに、少し時間がかかりました。

「BackHandler は動く」と「戻る操作が変わらない」は別の話です

Android 16 を対象にするアプリでは、予測型「戻る」が既定で有効になります。このとき OS 側で起きているのは、次の二つです。

従来(targetSdk 35 以下)targetSdk 36
onBackPressed() が呼ばれる呼ばれない
KeyEvent.KEYCODE_BACK が配送される配送されない

React Native 0.81 では、この変化を吸収して JS 側の BackHandler を動かし続けるための修正が入っています。コミュニティのアナウンスには、onBackPressed はもう呼ばれないが BackHandler は動作を続けるはずで、独自のネイティブ側の戻る処理を持っている場合は OnBackPressedDispatcher へ手で移行する必要がある、と書かれています。

ここで私が読み違えていたのが、「BackHandler が動く」の射程でした。動くのは、自分で hardwareBackPress に登録したハンドラです。ハンドラを登録していない画面 — つまりナビゲーションライブラリに戻る操作を任せている画面 — の挙動までが保証されているわけではありません。

そして React Navigation は、この記事を書いている時点で予測型「戻る」に追随しきれていません。公式ドキュメントは、システムの戻るジェスチャーを期待どおり動かすために android:enableOnBackInvokedCallbackfalse にする案内を出しています。Expo 側でも SDK 54 でスタック内の戻る操作が効かなくなる報告が上がっており、react-native-screens の新しいネイティブスタックで対応が進んでいる段階です。

つまり、壊れうるのは自分が書いた BackHandler ではなく、書かなかった箇所のほうでした。これが今回いちばん直感に反した点です。自分のコードを読み返しても、壊れる理由は見つかりません。

opt-out フラグが止めるものと、止めないもの

android:enableOnBackInvokedCallback="false" は、一時的な回避として公式に案内されているフラグです。ただしこのフラグの効き方には、把握しておかないと判断を誤る非対称があります。

対象フラグを false にしたとき
予測型「戻る」のシステムアニメーション無効になる
OnBackInvokedCallback無視される
OnBackPressedCallback値によらず呼ばれ続ける

OnBackPressedCallback はフラグの値に関係なく呼ばれます。ですので、AndroidX の作法で戻るを扱っている部分は、opt-out を入れても入れなくても動きます。フラグで戻せるのは、あくまで OS 側のアニメーションと新しいコールバック経路のほうです。

もう一点。このフラグは <application> にも <activity> にも書けます。両方に書いた場合は個別の指定が優先されるため、<application>false を入れたのに <activity> 側へ過去の検証で true が残っていると、その画面だけ挙動が揃いません。私はこの取りこぼしを機械で潰すことにしました(後述のスクリプトで <activity> 側も見ているのはこのためです)。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
8月31日の期限に必要なのは targetSdk の引き上げだけで、予測型「戻る」への本対応は切り離せると判断できるようになる
手元の複数アプリのうちどれが戻る操作で壊れうるかを、実機を触る前に検査スクリプトで仕分けられるようになる
AndroidManifest への手書きが次の prebuild で消える事故を避け、opt-out を再現可能な形で残せるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-07-28
prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し
Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。
開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
開発ツール2026-08-17
Expo UI の drop-in 置き換えで、依存が本当に1本減る条件
Expo UI が SDK 56 で安定版になり、コミュニティ製パッケージ8件に drop-in の置き換えが用意されました。import を1行入れ替えても依存が減らない場合があります。減る条件を依存グラフから機械的に判定する手順をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →