Android WebView 内核升级方案与 H.265 硬解实践
问题背景
WebView 版本差异带来的问题
Android 5.0 以后,WebView 升级通常依赖 Google Play 安装 APK,但即便安装了也不一定能正常工作。像华为、Amazon 等特殊机型的系统 WebView Chromium 版本往往较低,只能使用厂商自带的 WebView,无法调用 Google 的 WebView。
典型问题场景
H.265 视频播放问题:
- 华为部分机型(如 Mate30)的系统 WebView (Chromium 99) 不支持 H.265
- 升级到 Google WebView (Chromium 122) 后即可支持
- WebView 能否用 H.265 硬解,取决于其底层的 Chromium 内核,而非 Android 系统本身
版本差异示例:
升级前:
- 包名:com.huawei.webview
- 版本:14.0.0.331
- UserAgent 中的 Chromium 版本:99.0.4844.88 (< 107,不支持 H.265)
升级后:
- 包名:com.google.android.webview
- 版本:122.0.6261.64
- UserAgent 中的 Chromium 版本:122.0.6261.64 (支持 H.265)
Android 系统对 H.265 的支持要求
重要理解:Android 5.0 (API 21) 及更高版本,系统必须提供 H.265 (HEVC) 解码能力,但这指的是解码能力 (Decoder),不区分软解或硬解,且主要针对 MediaCodec 等原生接口。
- 强制解码能力:从 Android 5.0 开始,系统解码器需支持 HEVC Main Profile
- 软解与硬解:规范只要求"有解码器",并未强制要求必须是硬件解码
- 兼容性测试 (CTS):Android 的兼容性测试套件会包含对
MediaCodec能否成功创建并配置video/hevc解码器的测试
WebViewUpgrade 项目介绍
项目概述
WebViewUpgrade 是一个在 Android 5.0+ 上实现免安装升级 WebView 内核的开源库。它允许应用将内置或下载的 WebView APK 作为系统 WebView 的实现,从而解决部分机型(如华为、Amazon)系统 WebView Chromium 版本过低导致的 H.265/HEVC、ES6、现代视频能力不可用等问题。
核心原理
WebViewUpgrade 通过在运行时 Hook WebViewUpdateService / PackageManagerService 的 Binder 调用,以 App 内 APK 作为 WebView 实现,实现内核的切换和升级。
GitHub 仓库
- 官方仓库:https://github.com/JonaNorman/WebViewUpgrade
- 镜像仓库(便于国内访问):

