老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

手機裡最神秘的軟體:webview 到底在幹嘛?

你可能從未在應用抽屜裡看見它,但 webview 每天都在默默為你的手機渲染著數不清的網頁內容。這篇實測帶你揭開這個隱形引擎的面紗。

webview:藏在每個 App 裡的隱形瀏覽器引擎

先說一個我觀察到的現象:當你在手機上打開某個 App 裡的網頁——比如在支付寶裡看個活動頁、在微信裡打開一篇文章——你有沒有注意到,那頁面既不是用 Chrome 開的,也不是 App 自己寫的原生界面?它看起來像網頁、操作起來像網頁,但地址欄在哪兒?後退按鈕為什麼有時候返回上一頁網頁、有時候直接退出了?

這就是 webview 在發揮作用。簡單講,webview 是一個可嵌入的網頁渲染組件——Chrome 是完整的瀏覽器產品,有地址欄、書籤、設置頁;webview 是一個引擎,宿主 App 把它當成一個「網頁顯示器」塞進自己的界面裡,渲染邏輯全交給它,外觀和行為細節則由 App 開發者掌控。

這款軟體的包名是 com.google.android.webview,從包名就能看出來——它是 Google 官方維護的系統級組件,不是你隨便從應用商店裝的普通 App。想深入了解 webview下載 的完整指南可以參考這份整理好的文檔。但有意思的是,很多手機用戶甚至不知道它的存在,因為它不會出現在應用抽屜裡,也沒有圖標。它就這樣安靜地待在後台,默默為幾乎所有 App 提供網頁渲染能力。

適合誰來了解 webview?我覺得兩種人最需要:一是移動端開發者——寫 App 時免不了和 WebView 打交道,權限模型、數據隔離、混合內容策略這些細節差一點就踩坑;二是重度手機用戶——當你發現「Chrome 裡某功能正常,但 App 裡的網頁不正常」時,第一反應應該是 webview 版本落後了,而不是 App 壞了。

安裝

webview 有一個和所有普通 App 都不一樣的地方:你大概率從來沒有親自安裝過它。它預裝在幾乎所有 Android 設備上,而且因為使用了 Google Platform 簽名 + SharedUserId="android.uid.system" 的雙重保障,它是 Android 系統裡唯一能在不 root 的情況下覆蓋更新的系統級組件。

安裝包大小 219.60M,最新版本跟隨 Chromium 大版本更新,目前是 127.0.6533.64。想了解 webview官網 的更新策略細節可以參考這份教學。更新機制也很特別:普通 App 需要用戶在 Play 商店手動或自動更新,webview 則由 Google Play 商店靜默推送——你看不到下載進度條、看不到安裝彈窗、甚至不知道更新發生過。整個過程不打斷任何 App 運行,也不觸發應用數據清理。

但並非所有手機都能正常收到 Google 的 webview 更新。小米 HyperOS 用了自研的 WebView 並換了簽名,導致 Google Play 上的 com.google.android.webview 無法安裝覆蓋,只能靠小米自己推送更新;HarmonyOS NEXT 則完全不用這套機制。如果你是小米或華為用戶,打開應用抽屜看看 webview 的版本,大概率會比 Pixel 用戶落後幾個大版本。

想確認手機上的 webview 版本?打開設置 → 系統 → Android System WebView(部分廠商藏在「開發者選項」裡),裡面能看到當前版本號、最後更新時間,以及是否為最新版本。

Google Play 商店裡的 Android System WebView 頁面

第一眼體驗:打開設置頁才發現它在這裡

說實話,我第一次打開 webview 的設置頁時有點吃驚——這東西居然有設置頁?不是說它沒有圖標嗎?原來 webview 的設置頁藏在系統裡,你得通過一個隱藏的 intent 或者從開發者選項裡才能進去。界面很簡單,只有版本號、更新狀態、WebView 實驗性功能幾個區塊,完全不是普通 App 那種設置頁風格。

但這就是 webview 的「隱形」本質——它存在於系統層,不面向最終用戶設計界面。它的「界面」全由宿主 App 決定:有的 App 會在 WebView 外殼上加一個地址欄,有的會加一個內建瀏覽器框架,還有的直接把 WebView 嵌在原生界面裡,讓你完全感覺不到網頁的存在。這種設計哲學我很欣賞——該隱形的時候就隱形,該露臉的時候再露臉。

用下來的感受:幾個讓我意外的坑

說了這麼多好處,來說說用起來讓我覺得別扭的地方。我特意在一台小米 HyperOS 設備上試了幾種常見場景,結果踩了兩個實打實的坑。

第一個是 blob URL 被攔截。我打開一個需要下載 PDF 協議的遊戲內商店頁面,點「下載」按鈕之後——什麼都沒發生。沒有彈窗、沒有下載進度條、連個失敗提示都沒有。這就是小米 HyperOS 對 blob: 協議的安全策略更嚴,默認攔截了 blob 格式的下載鏈接。對普通用戶來說這意味著什麼?意味著你在某些 App 裡無法保存圖片、無法下載附件、無法預覽 PDF——而你甚至不知道是 webview 在搞鬼。webview文檔 裡對 blob 協議的各廠商差異有完整的整理,解決辦法是有的,但需要 App 開發者在代碼裡做反射調用小米私有 API,普通用戶束手無策。

第二個是 更新不透明。我有一次發現某個 App 裡的網頁功能突然不正常了——按鈕點了沒反應、滾動也卡。排查了半天才發現,原來是 webview 剛自動更新到了一個有 bug 的版本。但問題在於:我完全不知道它什麼時候更新的、也沒有辦法暫時關閉更新或者快速回滾到上一版。普通 App 可以在 Play 商店裡凍結更新,webview 不行——它被 Google 強制推送安全補丁,你別無選擇。這對重度依賴 App 內網頁功能的用戶來說,是個不太友好的設計。

適合誰、不適合誰

總結一下:webview 對普通用戶來說完全不需要了解——它是系統組件,默默幹活就行。但對移動端開發者來說,webview 是繞不開的存在——權限模型、數據隔離、混合內容策略、廠商定制差異,每一個細節都可能導致你的 App 在某些設備上表現異常。

如果你是重度手機用戶,經常遇到「某個 App 裡的網頁顯示異常」,可以留意一下 webview 的版本——很多時候升級一下 webview 比重裝 App 更管用。但千萬別隨便從第三方網站下載 webview APK 覆蓋安裝,平台簽名機制決定了只有同簽名的 APK 才能成功覆蓋,亂裝只會把系統搞亂。

我個人最期待的是 Android 16 上的改進——開發者選項裡能一鍵切換 Beta / Dev / Canary 軌道,不用再手動下載 APK。這至少讓想嘗鮮的用戶有了更清晰的選擇,也讓 webview 這個隱形引擎終於開始意識到,有時候露個臉也是必要的。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章