題目背景
你負責包含舊 View、Jetpack Compose 與第三方 SDK 的 Android 應用。Android 16 對 target 16 以上的應用移除 windowOptOutEdgeToEdgeEnforcement,應用必須正確處理視窗插入。請說明如何發現風險、修改佈局、驗證多裝置形態並控制發布風險。
面試官考察點
- 是否區分「在 Android 16 上相容執行」與「把 targetSdkVersion 提升到 16」。
- 能否系統檢查狀態列、導覽列、輸入法、瀏海與滾動容器的 inset 處理。
- 是否能覆蓋舊 View、Compose、函式庫與 SDK 的組合測試。
- 能否設計相容性開關、灰度發布與可觀測回退。
澄清問題
先確認目前 target/compile SDK、支援的 Android 版本、View 與 Compose 比例、橫豎屏與摺疊裝置範圍,以及是否使用全螢幕相機、地圖或 WebView。詢問現有截圖測試、崩潰與佈局客訴基線,並確認第三方 SDK 是否宣告 edge-to-edge 支援。
30 秒回答
我會分兩階段:先不提升 target,在 Android 16 裝置和相容性開關下暴露行為問題,再把 inset 修復與 target 升級分開。統一檢查根佈局、狀態列/導覽列、IME、手勢區域與滾動內容,覆蓋 View 與 Compose 元件。先發布相容版本到小比例使用者,監控崩潰、遮擋客訴與關鍵流程完成率;只有截圖回歸和裝置矩陣通過後才提高 target。出現嚴重佈局問題時回退版本或關閉受影響功能,不把 target 升級與大量新功能綁在一次發布。
分步推導
1. 分離相容性與目標升級
Android 官方遷移指南建議先在 Android 16 測試現有應用,許多相容修復不必立即更改 targetSdkVersion。之後再針對以 Android 16 為目標的行為變更升級設定,便於定位問題來源。
2. 建立 inset 清單
檢查根容器是否消費系統列 inset,頂部工具列、底部導覽、清單最後一項、輸入框與彈窗是否會被遮擋。對 Compose 使用統一的 window inset 約定,對舊 View 避免同一層級重複 padding;相機、地圖與 WebView 個別定義安全區域。
3. 使用測試工具縮小範圍
Android 16 相容性切換開關可在不改變 target 的情況下單獨啟用目標行為。把它接入自動化裝置矩陣,覆蓋 4 KB/16 KB 頁面、橫豎屏、三按鈕/手勢導覽、摺疊屏與不同字體縮放,並記錄變更 ID 與截圖差異。
4. 灰度與回退
先發布只包含佈局修復的相容版本,再在 beta 與 1% 生產流量提升 target。監控啟動崩潰、ANR、關鍵頁面可點擊率、底部遮擋客訴與第三方 SDK 錯誤。把 target 升級保持為獨立變更;必要時回退上一版本或暫時關閉受影響入口。
高品質示範回答
我會先鎖定相容性基線:在 Android 16 模擬器和真實裝置安裝目前線上版本,跑完整流程並截取邊緣區域。再用相容性開關只開啟 edge-to-edge 相關行為,定位是根佈局、第三方 SDK 還是 target 升級造成問題。實作上建立統一 inset 處理層,明確哪些元件消費頂部、底部與 IME inset,避免 View 與 Compose 重複加入 padding;相機、地圖、WebView 與彈窗各自做安全區測試。先發布相容修復版本,不改 target;當截圖、無障礙、橫豎屏、摺疊裝置與輸入法測試通過後,再以獨立變更提升 target,先 beta 再 1% 灰度。監控崩潰、ANR、核心轉化與遮擋回饋,出現明顯回歸就回退版本或關閉新入口。這樣既回應平台強制變更,也保留清晰故障歸因與回退路徑。
常見誤區
- 直接提升 targetSdkVersion,無法區分平台行為與程式碼改動的影響。
- 只修狀態列,忽略導覽列、IME、摺疊屏、滾動末端與彈窗。
- 讓多個佈局層重複消費 inset,造成雙倍留白。
- 只在模擬器測試,不驗證第三方 SDK、真實裝置與字體縮放。
- 把 edge-to-edge 遷移和大型功能發布綁定,缺少獨立回退。
追問與應對
如果問「必須馬上把 targetSdkVersion 改到 16 嗎?」
回答:不必把相容修復與 target 升級同時進行。先在 Android 16 測試目前 target、修復相容問題,再按 Google Play 要求與產品節奏獨立升級 target。
如果問「如何處理第三方 SDK?」
回答:建立 SDK 清單,在真實裝置與相容性開關下驗證;優先升級已支援 edge-to-edge 的版本,無法升級時在外層提供安全 inset 或隔離該頁面。
如果問「如何確認修復沒有破壞舊系統?」
回答:用同一套截圖和關鍵流程矩陣覆蓋最低支援版本、Android 15、Android 16、橫豎屏、導覽模式與字體縮放,比較可點擊區域和內容遮擋,不只看啟動是否成功。