博客

WebView 是什么,Android System WebView 又是什么

原理与选择 · · 约 9 分钟

WebView 是浏览器引擎做成的一块组件,应用把它嵌进自己的窗口。WebView 应用用这块组件显示网页,窗口里没有 Chrome 或 Edge 的地址栏、扩展和登录配置。Android System WebView 是安卓上的这一份,Google 预装在手机里,给别的应用显示网页,它和 Chrome 不共用数据。电脑上同一块组件叫 WKWebView、WebView2 或 WebKitGTK,引擎跟着系统更新,不跟着你做的那个应用发版。

WebView 是哪一块

安卓文档里的 WebView 是用来显示网页的一个视图,默认就显示一页,没有导航按钮,也没有地址栏,应用自己创建这个视图再去加载地址。Chrome 的 WebView 文档补充了另一半,这块组件基于 Chromium,和 Android 上的 Chrome 共用渲染引擎,并且单独打成一个 APK,可以不跟安卓系统镜像一起更新。

四个系统上各叫什么

手机上 Play 商店里的应用名叫 Android System WebView,发布者是 Google LLC,介绍里写它是预装的系统组件,让安卓应用显示网页,网页内容由 Chrome 驱动。从 Android Lollipop 起,可更新的部分以 APK 或 App Bundle 分发,Chromium 把这个包叫做 WebView provider。带 Google Play 的设备从 Android 10 起,默认包名是 com.google.android.webview。

Mac 和 iOS 上的类是 WKWebView,Apple 的说法是用来显示可交互网页的对象,比如应用内浏览器,它在 iOS 8 替换了 UIWebView,在 macOS 10.10 替换了更早的 macOS WebView。WKWebView 说明写了 Mac 上的数据存储和检查器。

Windows 上是 Microsoft Edge WebView2,把 HTML、CSS 和 JavaScript 嵌进原生应用,用 Edge 的引擎来画。WebView2 是什么写了运行库和 msedgewebview2.exe。Tauri 的说明里,这份运行库会自己更新,Windows 11 已经预装。

Linux 上是 WebKitGTK,项目称它是 GNOME 平台的官方网页引擎,Epiphany 这类浏览器用的就是它,细节在什么是 WebKitGTK。Tauri 的 Linux 版本表并不完整,2026 年 11 月 7 日 WebKitGTK 网站列出的稳定压缩包是 2.54.2,比那张表里的 2.36 新,所以要看你的发行版实际装的包。Pake 的 README 列的是 macOS、Windows 和 Linux。

浏览器自己留着的东西

WebView2 关掉了新标签的 Ctrl+T、切换标签的 Ctrl+Tab,以及聚焦地址栏的 Ctrl+L 和 Alt+D,也会拦住 edge://newtab 和 edge://omnibox。WKWebView 会跟着点开的链接走,后退和前进要应用自己接到 goBack 和 goForward 上。--multi-window 默认关着,打开之后 Pake 保持一个进程,再开更多窗口,Mac 上用 Cmd+N 开的窗口会并进这个应用自己的系统标签组,弹窗不进这个标签组。

WebView2 里浏览器扩展默认关着,Microsoft 把这一行标成不能在那张功能表里配置,并拦住 edge://extensions。AreBrowserExtensionsEnabled 默认是 false,宿主应用不把它设成 true,扩展就用不了。Chrome 的同步和 Data Saver 在安卓 WebView 里没有,哪怕 Android 7、8、9 上 WebView 做进了 Chrome 包里,两边仍然不共用数据。Pake 的命令行文档没有加载扩展的参数。

Cookie 放在另一个文件夹里,WebView 和 Google Chrome 不共用数据,WebView2 关掉了收藏夹和 Cookie 的同步,Cookie、权限和缓存放在启动时为主机应用建的用户数据文件夹里。打开 --password-autosave 之后,Windows 上的 Pake 应用把密码存在这个应用自己的 WebView2 配置里,不进 Chrome 或 Edge。Pake 只在 Windows 和 Linux 上设置这个数据目录。Mac 上它留在 WKWebView 默认的数据存储里,WebKit 的源码把这份数据放在 ~/Library/WebKit 下按应用标识分开的文件夹里,Safari 的 Cookie 则在它自己的容器里。打开 --incognito 时不保存 Cookie、本地存储和历史。

页面是在哪个进程里画的

应用自己不解析 HTML,它创建一个视图,指向一个地址,系统里已经有的引擎把页面载进来,桌面系统和 Android 8.0 起的安卓都放在应用主进程外面。

安卓从 Lollipop 起,这个引擎就是 provider 那个包,框架去加载包里的原生库。WKWebView 和 WebKitGTK 背后的 WebKit 把每个页面放进单独的、带沙箱的 WebContent 进程。网络、磁盘缓存,以及 Web Storage、IndexedDB 这类存储,走一个共享的网络进程,剪贴板、麦克风和相机由 UI 进程代为申请。WebKitGTK 写道,自从 WebKit2 之后,网页不能把宿主应用弄崩溃,也不能把界面冻住。Pake 的 FAQ 里,Mac 上这个进程叫 WebContent,Linux 上叫 WebKitWebProcess,Gemini、Slack、ChatGPT 这种重页面可以占到几百 MB。

Chromium 的 WebView FAQ 还写着每 6 周发一版,Chrome 自己从 2026 年 9 月 8 日的 153 起,在所有平台上改成了两周一个稳定版,FAQ 的这个数字可能已经落后了。WKWebView 跟着 macOS 走,一台不再收到系统更新的 Mac 也不再收到 WebKit 更新,WebView2 自己更新,WebKitGTK 跟着发行版走。Play 商店列表在 2026 年 11 月 4 日更新过 Android System WebView 这个组件。

Tauri 和 Pake 为什么用系统这块

Tauri 用系统里已经有的 WebView,桌面和安卓都是,窗口由 TAO 创建,页面由 WRY 画,应用自己不带浏览器引擎。Tauri 网站上说一个最小的应用可以不到 600KB。Electron 把 Chromium 和 Node.js 打进二进制,同一个应用版本在 Windows、macOS 和 Linux 上带的是同一版 Chromium,Mac 上画页面的也是这份 Chromium,引擎的下一次更新要你自己发。每个桌面都得对着同一份引擎时就走这条,两边的差别写在Tauri 和 Electron。

Pake 包的是一个你已经有的地址。安装包通常不到 10 MB,因为里面没有 Chromium。Linux 上重页面占的内存仍然和在 GNOME Web 里打开差不多,Pake 没有哪个设置能把它明显降下去。命令行准备好之后用这条。

pake https://example.com --name Example

窗口用的是 WKWebView、WebView2 或 WebKitGTK。

Android System WebView 能不能关

Chromium 的用户 FAQ 不建议关掉 WebView,用到它的应用很容易崩溃,安全更新也会停。Android 7、8、9 上实现在 Chrome 里面,单独那个包如果关着并且不能再打开,是预期情况,关掉 Chrome 之后 WebView 会切到独立的包。Android 10 起两者是两个应用,关掉 Chrome 不会改当前的 provider。

把当前选中的 provider 关掉,系统会退到另一个合格的包,一个都不剩时 WebView 就停了,那些应用会崩溃,直到你重新启用一个包。Android 7.0 起,提供不止一个包的设备可以让用户选用哪一个。Play 商店页面能看到 Google 的那个包。Chromium 说这类设备的开发者设置里能看到当前选中的包。

登录和页面不对时怎么查

在应用里登录,退出再打开,会话应该还在,--incognito 会把会话清掉。

Google 登录失败有时是对方的策略,Microsoft 写道 Google 已经在嵌入式 WebView 里禁用了 Google 登录,WebView2 包含在内。Pake 的文档说加上 --new-window 或 --multi-window 也过不了这一关。Cloudflare 的检查页也会一直转,FAQ 说系统 WebView,尤其是 Linux 上的 WebKitGTK,经常被认出来,自定义用户代理也过不去。这两种都改用普通浏览器或原生客户端。

页面只在应用里不对,就用同一套引擎的浏览器打开对照,这台 Mac 上用 Safari,这台电脑上用 Edge,这台手机上用 Chrome。Chrome 的文档说,Android 上 Chrome 能用的功能,多半在 WebView 里也能用。Linux 上 Pake 在 WebKitGTK 2.52 及以后用共享内存渲染,视频需要的硬件加速还在,更老的版本保留兼容用的标志,发行版的包可以比网站上的 2.54.2 旧很多。

想看电脑上这份引擎的版本,Mac 上运行下面这条,打印的构建号和 Safari 自己的 CFBundleVersion 一样。

defaults read /System/Library/Frameworks/WebKit.framework/Resources/Info.plist CFBundleVersion

Windows 上,微软的分发说明把运行库版本放在 EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5} 下的 pv 值里。Arch 上用 pacman -Q webkit2gtk-4.1,Debian 和 Ubuntu 上用 dpkg -s libwebkit2gtk-4.1-0。

什么时候留在浏览器或 Electron 里

要标签、扩展和已经登好的配置,就留在浏览器里。要一个网站占一个桌面窗口,用 pake。安卓上如果应用主要是打开别人的网站,Chrome 的文档说可以考虑 Custom Tabs,页面仍然留在 Chrome 里。要每个桌面带同一份 Chromium,用 Electron。Pake 的文档把 Mac 应用放在 WKWebView 上。

常见问题

能不能卸掉 Android System WebView 省空间?

Android 7、8、9 上,Chrome 在提供 WebView 时,单独那个包是关着的,手机不会再下载重复的更新。Chromium 不建议关掉 WebView,显示网页的应用很容易崩溃,安全更新也会停。

Android System WebView 要不要更新?

要。Chromium 的 FAQ 说 WebView 和浏览器一样需要定期的安全更新,所有嵌了这块组件的应用都靠它,所以那些应用没发版,Play 商店里的这一条也会动。

不共用。安卓 WebView 和 Chrome 不共用数据,Windows 上的 Pake 应用把数据放在自己的 WebView2 配置里。Mac 上 Pake 用 WKWebView 默认的数据存储,Safari 里的登录不会带过来,要在应用里再登录一次。

Android System WebView 是可以打开来浏览的浏览器吗?

不是。Google 的商店介绍写的是一块给别的应用显示网页的组件,powered by Chrome 指的是渲染引擎,Chrome 的同步不在 WebView 里。

为什么用 Electron,不用系统 WebView?

Electron 带的那份 Chromium 就是这个应用版本在 Mac、Windows 和 Linux 上用的引擎。系统 WebView 跟着 macOS、WebView2 或发行版走,两台电脑可以把同一个网站画成不一样。