获取Android内置WebView内核版本

Quibbler 6月前 2809

获取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)



不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com