作者:我就唔分_753 | 来源:互联网 | 2023-08-14 11:03
年刚过,一回来bug来袭,年前提前回家过年了,来了之后同事告诉我Android4.4以下的手机H5加载不出来,暂时来不及解决直接就上线了,顿时满脸黑线,这都可以,我不在的时候
年刚过,一回来bug来袭,年前提前回家过年了,来了之后同事告诉我Android 4.4以下的手机H5加载不出来,暂时来不及解决直接就上线了,顿时满脸黑线,这都可以,我不在的时候都发生了啥?
于是乎,调试模式打开,拿了一个华为的4.0的手机测试,乖乖,果然空空的页面,毛线都没有一根,Log显示如下:
Viewport argument key "minimal-ui" not recognized and ignored
度娘和谷歌儿子查一遍再说
大致的结果是谷歌这孙子杀千刀的在4.0之前一直用的是webkit内核做的移动端引擎支持,而4.0之后就换成了chromium做内核了,其原因必然是因为H5越来越普及才这么搞得,然而,问题不在这里,问题是这孙子没有做向下版本兼容解决方案,什么世道啊,4.0的手机还是很多的好吧!老板让解决问题只要结果好吧!
传统系统内核(Webview)存在适配成本高、不安全、不稳定、耗流量、速度慢、视频播放差、文件能力差等问题,这是移动应用开发商在进行Hybrid App开发时普遍面临的难题。于是乎这会儿咱们的马化腾同学闪亮登场,话说BAT还真是做了点儿实事儿哈!腾讯浏览服务基于腾讯X5内核解决方案,能够有效解决传统移动web技术面临的普遍问题,同时能极大扩展应用(Hybrid App)内浏览场景的服务能力。
废话不多说,上解决方案:
[官网地址](http://x5.tencent.com)
[jar包下载地址](http://res.imtt.qq.com/TES/tbs_sdk_thirdapp_v3.0.0.1038_43000_1485049870479.zip)
下载 SDK jar 包放到工程的libs目录下,将源码和XML里的系统包和类替换为SDK里的包和类
注意,这里替换的只是所引用的WebKit源生类的包路径,类名都不动,这也方便了批量替换。
需要注意的是:
1)请不要在代码里使用下述写法:
import android.*;
import android.webkit.*;
import android.webkit.WebStorage.*;
import android.net.*;
import android.net.http.*;
2)除了源码里需要把相关的包名和类名进行替换,布局xml里的声明也需要替换,例如:
<com.tencent.smtt.sdk.WebView
android:id="@+id/forum_context"
android:layout_hljs-string">"fill_parent"
android:layout_hljs-string">"fill_parent"
android:paddingLeft=
"5dp" android:paddingRight=
"5dp" />
适配修改:
1. App 首次就可以加载 x5 内核
App 在启动后(例如在 Application 的 onCreate 中)立刻调用 QbSdk 的预加载接口 initX5Environment , 可参考接入示例,第一个参数传入 context,第二个参数传入 callback,不需要 callback 的可以传入 null,initX5Environment 内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App 启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了
2. 目前,由于SDK WebView所提供的WebView类,是对系统WebView的聚合包装,所以:获取系统内核的WebView或者 x5内核的WebView的宽高
android.webkit.WebView webView = new android.webkit.WebView(this)
int width = webView.getWidth()
需要采用下面的方式进行
com.tencent.smtt.sdk.WebView webView = new com.tencent.smtt.sdk.WebView(this)
int width = webView.getView().getWidth()
至此我的问题测试过后是解决了,在倒包的过程中有一个是280KB的 有一个是100多kb的,建议用大的,免得别人拿着一个微信或者QQ告诉你为啥别人能实现这种效果你得不能,你们懂得......
下一个介绍我在开发的时候遇到的WebView另外一个坑爹的坑,爬了好久才爬出来。