2026 年 10 月 15 日,掘金作者「戀貓de小郭」整理了 Flutter 最近合併的兩個改動(PR #190870 與 #191924):Android 的 Release 版本 APK,將不再允許外部透過 Intent 傳入 Flutter Engine 的底層參數,包含引擎啟動方式、Dart 配置、渲染與調試選項。這是技術圈的事,但如果你平常的工作節奏就是「打包、安裝、跑腳本、看結果」,這則消息其實也牽動著你的作息與身體。
先把這件事用白話說清楚。
改了什麼:一個方便調試的後門,被關上了
過去 Flutter 為了方便開發者,允許在啟動 App 時把 Engine 參數塞進 Intent extras(Intent 是 Android 元件之間傳遞資料的機制),Android Embedding 會把這些參數轉成底層引擎認得的命令列參數。好處是已編譯好的 APK 不用改程式碼,就能臨時調整啟動追蹤、渲染方式等行為。
問題在於安全:Intent 是跨元件的,如果一個 Flutter Activity 對其他應用開放,或存在不安全的轉發路徑,惡意應用就有機會把構造過的參數送進 Flutter 的啟動流程。來源特別點出風險最高的例子之一是共享庫路徑參數,攻擊者可能利用惡意庫路徑做到原生代碼執行(也就是在 App 的底層跑起攻擊者想跑的東西)。當然,原文也說明了,這不等於任何第三方 App 都能攻擊所有 Flutter APK,實際攻擊還受 Activity 是否可達、元件權限、路徑校驗與沙箱等條件限制,目前屬於需要處理掉的潛在攻擊面。
最後官方的折衷方案是:Release 模式直接忽略這些參數,Debug 與 Profile 模式保留,因為徹底刪除會破壞大量依賴「一次打包、反覆啟動測試」的自動化工程。
從這則消息,看你的資訊識讀
看到「安全漏洞」「惡意代碼執行」這類字眼,很容易讓人覺得自己的 App 隨時會被攻擊。回到來源原文,它其實講得很節制:這是「潛在攻擊面」,需要多道條件同時成立。讀技術新聞時,分辨「已證實的大規模漏洞」和「被主動收掉的風險入口」,是保護自己判斷力的基本功。這次屬於後者,團隊在問題被實際利用前就先補上了,是好事。
這種「先看清楚強度再決定要不要焦慮」的讀法,和我們在Android Studio Quail 4 更新日誌裡幾乎沒有 Flutter 那篇聊過的原則是一樣的:標題和討論區的緊張感,往往比事實本身大得多。
對依賴自動化腳本的你,有兩件實際的事
第一,如果你或團隊的測試流程依賴「對 Release APK 動態傳參數」,這條路被關上了,相關腳本需要調整。可以採取的下一步是:先確認自己的專案有沒有用到這些 Intent 參數,沒用到就不用動;有用到,則趁升級前把測試流程改為在 Debug/Profile 下進行,或接受重新打包的成本。
第二,比較少被提起的,是這種改動對工作節奏的影響。自動化測試的目的本來是省時間,但當工具鏈一變,很多人會連著幾晚盯著腳本、反覆重打包、盯著 logcat 找原因。如果你發現自己已經連續幾天弄到半夜,眼睛乾、肩頸硬,不妨把「升級適配」當成一個可以排程的任務,而不是今晚必須解決的火警。這也是我們在把整套開發搬進終端機的你一文裡提過的老問題:工具越方便,人越容易忘記起身。
小結
這是一則值得知道、但不需要跟著緊張的技術消息。安全的後門被關上,開發者的便利在 Debug 模式被保留,折衷得算合理。如果你的測試流程受影響,把它排進工作時程慢慢遷移就好。至於那些為了追改動而熬夜的晚上,能少一晚是一晚,你的眼睛和肩膀會謝謝你。