安卓系统webview更新

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 安卓 正文

你无法直接更新整个安卓系统 WebView

安卓系统webview更新
(图片来源网络,侵删)

WebView 并不是一个独立的 App,它是安卓操作系统的一部分,作为系统级组件存在,它的更新方式与你的 App 完全不同,更新是由用户(或设备制造商)通过更新整个安卓系统版本来完成的。

下面我将从几个方面详细解释:


WebView 的更新机制

a) 系统更新 (System Update)

这是最根本的更新方式,Google 在发布新的安卓版本时,会包含更新后的 WebView 组件,用户需要:

  • 对于 Google Play 设备: 接收并安装来自 Google 的 Over-the-Air (OTA) 系统更新,这通常会将整个系统(包括 WebView)升级到新版本。
  • 对于非 Google Play 设备(如国内大部分手机): 接收来自设备制造商(如小米、华为、OPPO、vivo)的 OTA 系统更新,这些厂商会基于安卓 AOSP 源码进行定制,并自行决定何时推送包含 WebView 更新的系统更新。

特点:

安卓系统webview更新
(图片来源网络,侵删)
  • 更新频率低: 通常与安卓大版本更新同步,可能需要数月甚至更长时间。
  • 覆盖范围广: 更新后,设备上所有使用系统 WebView 的 App 都会受益。
  • 用户可控性差: App 开发者无法强制用户更新系统。

b) Google Play Core Library (推荐给开发者的方式)

为了解决系统更新慢的问题,Google 推出了 Google Play Core Library,它允许开发者将 Google Chrome 浏览器 作为 WebView 的一个“可替换组件”在 Play 商店中独立更新。

工作原理:

  1. 你的 App 不再强制依赖系统 WebView,而是依赖一个名为 androidx.webkit:webkit 的 AndroidX 库。
  2. 这个库会检测设备上是否存在一个由 Play 商店安装的、兼容的 Chrome 浏览器组件。
  3. 如果存在,你的 App 会优先使用这个由 Chrome 提供的、更现代、更安全的 WebView 渲染引擎。
  4. Google 可以通过 Play 商店随时更新这个 Chrome 组件,从而实现 WebView 的“热更新”,而无需用户等待整个系统更新。

特点:

  • 更新速度快: Google 可以快速推送安全补丁和新功能。
  • 开发者可控: 开发者可以在自己的 App 中集成支持此功能的库。
  • 用户透明: 这个过程是自动的,他们只需保持 Play 商店应用和 Chrome 浏览器为最新版本即可。

注意: 这种方式主要适用于安装了 Google Play 商店的设备,由于 Google 服务缺失,此方法基本不可用。

安卓系统webview更新
(图片来源网络,侵删)

开发者如何确保 WebView 的兼容性和最佳实践

作为开发者,你不能控制用户的系统版本,但你可以采取一系列措施来确保你的 App 在不同版本的 WebView 上都能良好运行。

a) 使用 AndroidX WebView 库

这是最重要的一步,始终在 build.gradle 文件中使用 AndroidX 的 WebView 库,而不是使用过时的 android.webkit

dependencies {
    implementation 'androidx.webkit:webkit:1.10.0' // 请使用最新版本
}

使用 AndroidX 库可以让你获得向后兼容性支持,并使用 Google 提供的最新 API 和 bug 修复。

b) 检查 WebView 版本和特性

在运行时,你可以检查当前设备的 WebView 版本,以决定是否使用某些新特性或提供降级方案。

// 获取 WebViewProvider 的版本
String webViewVersion = WebViewFactory.getProvider().getPackageName();
Log.d("WebViewInfo", "Current WebView Provider: " + webViewVersion);
// 获取 WebView 的版本号(如果可用)
try {
    PackageInfo info = getPackageManager().getPackageInfo(WebViewFactory.getProvider().getPackageName(), 0);
    String versionName = info.versionName;
    Log.d("WebViewInfo", "WebView Version: " + versionName);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
// 检查特定 API 是否可用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // 使用 Android 8.0 (Oreo) 的新特性
    CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}

c) 处理不同版本的差异

WebView 的 API 在不同安卓版本中有所变化,在 Android 5.0 (Lollipop) 之前,多进程 WebView 是不支持的,你需要用 Build.VERSION.SDK_INT 进行判断,避免调用不存在的 API 导致崩溃。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 使用 5.0 及以上版本的 API
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    // 使用旧版本的替代方案
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

d) 启用跨域 Cookie (Cookie Same-Site Policy)

这是一个常见的坑,新版 WebView 默认启用了更严格的 Cookie Same-Site 策略,可能导致你的 App 登录状态失效,你需要手动配置以保持兼容性。

// 在 Android 10 (Q) 及以上版本,需要手动设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}

e) 处理 JavaScript 接口的安全问题

为了防止跨站脚本攻击,从 Android 4.4 (KitKat) 开始,@JavascriptInterface 注解是必须的,对于更早的版本,你需要额外的安全检查。

class WebAppInterface {
    @JavascriptInterface
    public String showToast(String toast) {
        // 你的逻辑
        return "Data from Android";
    }
}
// 在代码中添加接口
webView.addJavascriptInterface(new WebAppInterface(), "Android");

用户如何更新 WebView

如果你是普通用户,想知道如何更新你手机上的 WebView,可以按以下步骤操作:

对于绝大多数安卓手机用户:

  1. 更新系统: 前往 设置 > 关于手机 > 系统更新,检查并安装最新的系统更新,这是更新 WebView 最可靠、最直接的方法。
  2. 更新 Chrome 浏览器: 打开 Google Play 商店,搜索并更新 Chrome 浏览器到最新版本,如果你的设备支持 Play Core Library,这会间接更新 WebView 的核心组件。
  3. 更新系统组件(部分品牌): 一些手机厂商(如三星、小米)在 设置 > 应用管理设置 > 系统 中提供了独立的“系统应用更新”或“组件更新”选项,WebView 可能包含在内。

对于华为等无法使用 Google 服务的用户:

你的 WebView 完全依赖于华为 EMUI/HarmonyOS 的系统更新,请:

  1. 打开 服务 App。
  2. 点击右上角的 更新 图标。
  3. 检查系统更新并安装,新版本系统会包含更新后的 WebView。

角色 核心要点 操作方法
普通用户 更新系统是王道 通过 设置 > 系统更新 升级整个安卓系统,同时保持 Chrome 浏览器为最新版本。
App 开发者 不能更新,但能兼容和优化 使用 AndroidX webkit
运行时检查 API 版本,避免调用不存在的接口。
处理已知差异,如 Cookie、多进程、JS 接口等。
(可选)集成 Play Core Library 以在支持的设备上获得更快的更新。
设备厂商 负责集成和推送 在定制 ROM 中集成特定版本的 WebView,并通过 OTA 分发更新。

希望这份详细的解释能帮助你全面了解安卓 WebView 的更新机制和相关实践!

-- 展开阅读全文 --
头像
苹果6sp换屏幕要多少钱
« 上一篇 前天
OPPO手机歌曲下载怎么操作?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]