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