Android WebView 架构全景图:从 APK 到渲染进程
它是一个 APK,不是系统库
这是理解 WebView 架构的关键设计。从 Android 5.0 开始,WebView 被正式拆成一个独立签名的 APK 文件:
- 包名:
com.google.android.webview - 签名:Google Platform 签名,与系统其他模块同源
- 分发:通过 Google Play 商店或厂商自有应用市场更新,可独立于 Android 系统升级
对比之下,Android 4.4 及更早版本里的 WebView 是编译进系统镜像里的静态库——改一个字符就要刷固件,完全不可持续。
三层调用关系
┌──────────────────────────────┐
│ 宿主应用(App) │ ← 调用 android.webkit.WebView 类
├──────────────────────────────┤
│ Android Framework API │ ← webkit 包做一层桥接
├──────────────────────────────┤
│ WebView APK(Chromium 内核) │ ← com.google.android.webview
│ · Blink 渲染引擎 │
│ · V8 JavaScript 引擎 │
│ · 网络栈 / 安全沙箱 │
└──────────────────────────────┘
App 开发时写的 WebView webView = new WebView(this) 只是创建了一个 View 容器。真正做渲染的 Chromium 进程跑在 WebView APK 自己的进程里,与宿主 App 进程隔离——这意味着渲染层崩溃不会让整个 App 跟着崩。
进程模型
WebView 使用多进程架构:
- 主进程(Browser process):负责资源调度、进程管理
- 渲染进程(Render process):每个 WebView 实例一个渲染进程,跑 Blink + V8
- GPU 进程(GPU process):硬件加速渲染,Android 5.0+ 默认开启
这种多进程隔离是 Chromium 的安全基石——渲染进程崩溃只会黑屏,不会影响宿主 App。
版本对应关系
WebView 的大版本号(127 → 128 → 129...)直接对应 Chromium 的大版本号:
| Chromium 版本 | WebView 版本(示例) | 主要特性 |
|---|---|---|
| M125 | 125.x | 隐私沙箱 v3、CSS nesting |
| M126 | 126.x | URL 标准对齐、WebGPU 进一步稳定 |
| M127 | 127.x | Popover API、View Transitions API |
| M128 | 128.x | Speculation Rules API 2 |
同属一个 Chromium 大版本的 Chrome 和 WebView 在渲染上应该表现一致,但不共享数据。
→ 继续阅读:WebView 与 Chrome 的内核同源但不共享数据