代表的な面接トピック

一般的な面接:AndroidアプリをAndroid 16のEdge-to-Edgeに移行するにはどのように進めますか?

一般普通
Offer.cc 編集チーム公開日 更新日

質問

あなたのAndroidアプリはレガシーなウィンドウレイアウトとシステムバー処理に依存しています。Android 16ではtarget 16+に対してEdge-to-Edgeのオプトアウトが削除されますが、移行とリリースをどのように計画しますか?

シナリオ

あなたはレガシーView、Jetpack Compose、サードパーティSDKが混在するAndroidアプリを担当しています。Android 16+をターゲットとするアプリではwindowOptOutEdgeToEdgeEnforcementが削除されるため、アプリはウィンドウインセットを正しく処理する必要があります。リスクの特定、レイアウトの変更、デバイスフォームファクタの検証、およびリリースリスクの制御をどのように行うか説明してください。

面接官が評価するポイント

  • 「Android 16上で互換性を保って動作すること」と「targetSdkVersionを16に引き上げること」の分離。
  • システムバー、IME、カットアウト、ジェスチャー領域、スクロールコンテナの体系的なチェック。
  • View、Compose、ライブラリ、SDKの組み合わせの網羅。
  • 互換性トグル、カナリアリリース、観測可能なロールバックの設計。

明確化のための質問

ターゲットおよびコンパイルSDK、サポート対象のAndroidバージョン、View/Composeの割合、縦向き/横向きおよび折りたたみデバイスのカバー範囲、全画面カメラ、マップ、またはWebViewの使用有無を確認します。スクリーンショットテスト、クラッシュ、レイアウトの不具合報告のベースライン、およびサードパーティSDKがEdge-to-Edgeサポートを文書化しているかどうかを質問します。

30秒の回答

私は2つのフェーズを用います。まず、ターゲットを引き上げずにAndroid 16での動作変更を顕在化させ、その後インセットの修正とターゲットのアップグレードを分離します。ViewとCompose全体でルートレイアウト、バー、IME、ジェスチャー領域、スクロールをチェックします。互換性対応のみのビルドを小さなコホートに配信し、クラッシュ、要素の遮蔽(オクルージョン)に関する報告、主要フローの完了率を監視します。スクリーンショットのデグレードテストとデバイスマトリクステストに合格した後にのみターゲットを引き上げます。不正なレイアウトをクリーンにロールバックできるよう、ターゲットの変更は大規模な機能開発から分離しておきます。

段階的な思考プロセス

1. 互換性とターゲットアップグレードの分離

Androidの移行ガイダンスでは、まず既存のアプリをAndroid 16でテストすることを推奨しています。多くの修正は即座のターゲット変更を必要としません。その上でAndroid 16をターゲットとするアプリ向けの動作変更に対処し、リグレッションの原因を明確に保ちます。

2. インセットチェックリストの構築

ルートレイアウトがシステムバーのインセットを消費しているか、ツールバー、ボトムナビゲーション、リストの最後のアイテム、入力フィールド、ダイアログが遮蔽されていないかを確認します。Compose用に統一されたインセット規則を確立し、レガシーViewでの二重パディングを防ぎます。カメラ、マップ、WebView画面は独自のセーフエリアルールでテストします。

3. スコープを絞り込むための互換性ツールの使用

Android 16の互換性トグルを使用すると、targetSdkVersionを変更することなく対象の動作を有効にできます。4 KB/16 KBページサイズ、画面の向き、3ボタン/ジェスチャーナビゲーション、折りたたみ式デバイス、フォントスケーリングをカバーする自動デバイスマトリクスにこれらを追加します。変更IDとスクリーンショットの差分を記録します。

4. カナリアリリースとロールバック

レイアウトのみの互換性ビルドを配信し、その後ベータ版および本番トラフィックの1%でターゲットを引き上げます。起動クラッシュ、ANR、主要ページのタップ成功率、画面下部の遮蔽に関する不具合報告、SDKエラーを監視します。ターゲット移行は分離した状態を保ち、必要に応じて前のビルドにロールバックするか、影響を受けるエントリーポイントを無効化します。

高品質な回答例

私はまず、現在のプロダクションビルドをAndroid 16のエミュレータおよび実機にインストールし、すべてのフローを実行して端の領域をキャプチャすることで互換性のベースラインを確立します。次に、互換性トグルを通じてEdge-to-Edgeの動作のみを有効にし、問題の原因がルートレイアウト、SDK、またはターゲットの変更のいずれにあるかを特定します。インセット処理レイヤーを1つ作成し、上部、下部、IMEの消費を明示的に割り当ててView/Composeの二重パディングを防ぎます。カメラ、マップ、WebView、ダイアログには個別のセーフエリアテストを実施します。ターゲットを変更せずに互換性修正をリリースします。スクリーンショット、アクセシビリティ、画面の向き、折りたたみ式、IMEのテストに合格した後、ターゲットの引き上げを独立した変更として実施します。まずはベータ、次に1%のカナリアです。クラッシュ、ANR、コアコンバージョン、遮蔽のフィードバックを追跡し、リグレッション発生時にはロールバックまたは新しいエントリーを無効化します。これにより、明確な原因特定とロールバック性を維持しながらプラットフォームの変更に対応できます。

よくある間違い

  • targetSdkVersionを即座に引き上げてしまい、リグレッションの原因特定ができなくなること。
  • ステータスバーのみを修正し、ナビゲーション、IME、折りたたみ式、リスト末尾、ダイアログを見落とすこと。
  • 複数のレイヤーでインセットを消費して二重パディングを発生させること。
  • エミュレータのみでテストし、SDK、実機、フォントスケーリングをスキップすること。
  • Edge-to-Edge移行を大規模機能とバンドルしてしまい、独立したロールバックができなくなること。

追加の質問と回答

「targetSdkVersionはすぐに16にする必要がありますか?」

いいえ。まずは現在のターゲットのままAndroid 16でテストし、互換性を修正してください。ターゲットのアップグレードは、Playの要件とプロダクトのタイミングに合わせて別途行います。

「サードパーティSDKはどのように扱いますか?」

それらを棚卸しし、互換性トグルを用いて実機でテストします。Edge-to-Edgeサポートを文書化しているバージョンを優先し、そうでない場合はセーフエリアラッパーを追加するか、影響を受ける画面を分離します。

「古いAndroidバージョンが引き続き動作することをどのように証明しますか?」

サポートされている最小バージョン、Android 15、Android 16において、画面の向き、ナビゲーションモード、フォントスケール全体にわたり同じスクリーンショットおよびクリティカルフローマトリクスを実行します。起動の成功だけでなく、タップ可能な領域や遮蔽の有無を比較します。

公開情報ソース

関連する質問