获取Android内置WebView内核版本

QuibblerQuibbler 2024-07-16 约 6 分钟 12106 次阅读

获取Android内置WebView内核版本

竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。

1、设置查看

在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:


2、页面查看

通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两个网站可以直接打开查看浏览器的内核版本:

①https://www.index0.cn/core/

Mozilla/5.0 (Linux; U; Android 14; zh-Hans-CN; MAG-AN00 Build/HONORMAG-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 Quark/7.0.6.601 Mobile Safari/537.36

②https://liulanmi.com/labs/core.html

Mozilla/5.0 (Linux; Android 14; MAG-AN00 Build/HONORMAG-AN00;) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Mobile Safari/537.36 T7/13.38 SP-engine/2.76.0 languageType/0 bdh_dvt/0 bdh_de/0 bdh_ds/0 bdapp/1.0 (bdhonorbrowser; bdhonorbrowser) bdhonorbrowser/8.1.1.4 (P1 14) NABar/1.0


3、代码获取

前面两种方法显然不适合开发,开发中往往通过代码去判断浏览器内核版本,从而提取出内核版本进行兼容。

3.1、通过WebSettings

借助WebView的设置类WebSettings,可以获取当前WebView设置的UA标识:

val webView = WebView(this)
    val setting = webView.settings
    userAgent = setting.userAgentString

打印获取到的结果如下:

Mozilla/5.0 (Linux; Android 13; V2055A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36

开发者还可以给WebView替换设置自定义的UA:

setting.userAgentString = userAgent

此外还可以通过getDefaultUserAgent(Context context)静态方法直接获取:

/**
     * Returns the default User-Agent used by a WebView.
     * An instance of WebView could use a different User-Agent if a call
     * is made to {@link WebSettings#setUserAgentString(String)}.
     *
     * @param context a Context object used to access application assets
     */
    public static String getDefaultUserAgent(Context context) {
        return WebViewFactory.getProvider().getStatics().getDefaultUserAgent(context);
    }

3.2、通过系统属性

这里使用了一个 Java获取系统属性的方法System.getProperty(String)获取Android系统User-Agent:

var userAgent = System.getProperty("http.agent")

调用的是Java的API,直接在JAVA虚拟机上跑一次,会发现结果为null。因为该函数取的是Java平台的系统信息,而系统信息没有“http.agent”字段,这个字段是对于Android系统的,在Android上打印一下,得到的结果如下:

userAgent : Dalvik/2.1.0 (Linux; U; Android 13; V2055A Build/TP1A.220624.014)

相关推荐

WilliamChart:轻量美观的 Android 图表库实战
精选开源

WilliamChart:轻量美观的 Android 图表库实战

WilliamChart:轻量美观的 Android 图表库实战数据可视化是运动、健康、金融、统计类 App 的刚需。MPAndroidChart 功能最全但偏重复杂,WilliamChart 走的则是"轻量 + 美观 + Kotlin 原生"路线——v3 用 Kotlin 完全重写,API 极简,一行 chart.animate(dataSet) 就能把数据画成带动画的折线/柱状/环形图,开箱即

175