获取Android内置WebView内核版本

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

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

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w
包可见性引起的问题:Unable to start service Intent U=0: not found
Android

包可见性引起的问题:Unable to start service Intent U=0: not found

包可见性引起的问题:Unable to start service Intent U=0: not found有同学遇到无法启动三方应用Service的“玄学”问题,让我来看看到底是哪里的问题。通常启动三方应用的Service很简单,只需简短的几行代码:但是无论如何也不能启动三方应用的Service服务,查看AMS相关的系统日志发现是找不到Service导致启动失败(也没有报异常出来):1、问题分

9.4k