webview 中文文档 下载 App

Jetpack Webkit (androidx.webkit) 让开发者不再关心 Android 版本差异

为什么需要它

每个 Android 系统版本(10、11、12、13、14...)自带一套固定的 android.webkit API——来自当时发布 WebView APK 时的 Chromium 版本。问题是 Android 发布速度比 WebView APK 慢得多:

Jetpack Webkit 的解决方案:不调用 Android 平台 API,而是通过反射 / JNI 直接调用 WebView APK 的 API。

架构

Jetpack Webkit 架构示意图
Jetpack Webkit 作为兼容性层

三层关系:

App 代码 → androidx.webkit (Jetpack Webkit 库)
                    ↓
            WebView APK 的 API(设备上最新版本)
                    ↓
            Chromium 渲染引擎

对比原生:

App 代码 → android.webkit (Android 平台 API,固定死)
                    ↓
            Chromium 渲染引擎

引入方式

Gradle:

implementation "androidx.webkit:webkit:1.12.1"

检查设备是否支持:

if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) {
    // 可以用 WebMessageListener API
}

它解决了什么

问题Jetpack Webkit 怎么解
Android 10 和 Android 14 的 WebSettings 差异统一的 API,自动适配
WebView 方法在旧 Android 上不存在WebViewFeature.isFeatureSupported() 检查
远程调试 API 碎片化WebViewCompat 统一入口
文件上传兼容性WebResourceRequestCompat

常用 API

// WebViewCompat —— WebView 的兼容层
WebViewCompat.evaluateJavascript(webView, jsValue, callback);
WebViewCompat.postWebMessage(webView, message, targetOrigin);

// WebSettingsCompat —— WebSettings 的兼容层
WebSettingsCompat.setSafeBrowsingEnabled(webView.getSettings(), true);
WebSettingsCompat.setForceDark(webView.getSettings(), FORCE_DARK_ON);

// WebViewAssetLoader —— 加载 assets/ 下的静态资源(解决 file:// 安全问题)
WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder().addPathHandler(
    "/assets/",
    new WebViewAssetLoader.AssetsPathHandler(context)
).build();

现状与推荐

→ 继续 Jetpack 系列:Jetpack Webkit 与平台 API 差异