美文网首页webView专题内容
腾讯X5内核集成一些建议和爬坑记录

腾讯X5内核集成一些建议和爬坑记录

作者: 闪电代码手 | 来源:发表于2017-09-23 10:21 被阅读293次

    在集成X5内核过程中,我遇到了很多问题。腾讯嘛,东西做的很好,但是官方文档写的是真的不行。不仅写的不清楚,而且可能会造成误导。但是没办法啊,X5内核确实比自带的webview强大。
      其实,一开始集成X5内核我是拒绝的,直到我们的项目在魅族MX6,Android7.1.1上报了一个怎么也找不出原因的错,而且报错之后直接就闪退了,完全没有报错信息,魅蓝5上面都是正常的。将网页拷贝进Chrome之后,发现报了一个这样的错:

    报错图片

      而由于我们的H5端代码又是不能改的,就只能委屈我们自己了。话不多说,开始搞事。

    首先,打开https://x5.tencent.com/tbs/,把该准备的jar包等等准备好,前面所有的都按照腾讯的套路一步一步来。

    系统内核 SDK内核
    android.webkit.ConsoleMessage com.tencent.smtt.export.external.interfaces.ConsoleMessage
    android.webkit.CacheManager com.tencent.smtt.sdk.CacheManager(deprecated)
    android.webkit.CookieManager com.tencent.smtt.sdk.CookieManager
    android.webkit.CookieSyncManager com.tencent.smtt.sdk.CookieSyncManager
    android.webkit.CustomViewCallback com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback
    android.webkit.DownloadListener com.tencent.smtt.sdk.DownloadListener
    android.webkit.GeolocationPermissions com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback
    android.webkit.HttpAuthHandler com.tencent.smtt.export.external.interfaces.HttpAuthHandler
    android.webkit.JsPromptResult com.tencent.smtt.export.external.interfaces.JsPromptResult
    android.webkit.JsResult com.tencent.smtt.export.external.interfaces.JsResult
    android.webkit.SslErrorHandler com.tencent.smtt.export.external.interfaces.SslErrorHandler
    android.webkit.ValueCallback com.tencent.smtt.sdk.ValueCallback
    android.webkit.WebBackForwardList com.tencent.smtt.sdk.WebBackForwardList
    android.webkit.WebChromeClient com.tencent.smtt.sdk.WebChromeClient
    android.webkit.WebHistoryItem com.tencent.smtt.sdk.WebHistoryItem
    android.webkit.WebIconDatabase com.tencent.smtt.sdk.WebIconDatabase
    android.webkit.WebResourceResponse com.tencent.smtt.export.external.interfaces.WebResourceResponse
    android.webkit.WebSettings com.tencent.smtt.sdk.WebSettings
    android.webkit.WebSettings.LayoutAlgorithm com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm
    android.webkit.WebStorage com.tencent.smtt.sdk.WebStorage
    android.webkit.WebView com.tencent.smtt.sdk.WebView
    android.webkit.WebViewClient com.tencent.smtt.sdk.WebViewClient

    总之呢,就相当于是一大波的自定义View和一大波的自定义接口,X5是基于4.4的WebView的。不过需要注意的是,不仅在类里面要重写,布局文件中也要替换WebView的包。官方给出了示例:

    布局中WebView

    <com.tencent.smtt.sdk.WebView
        android:id="@+id/forum_context"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    

    这一步可不能忘了

    x5暂时不提供64位so文件,为了保证64位手机能正常加载x5内核,请参照如下链接修改相关配置https://x5.tencent.com/tbs/technical.html#/detail/sdk/1/34cf1488-7dc2-41ca-a77f-0014112bcab7

    其实,去他的官方demo里面把so文件拷到自己的项目里面就可以了的。

    权限声明,这个就不用讲了吧

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    上述步骤做完了之后,就可以在我们自定义的Application里面onCreate()里面初始化X5内核了,我写了个方法,initX5Core()

    private void initX5Core() {
            //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
            QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
                @Override
                public void onViewInitFinished(boolean arg0) {
                    //x5內核初始化完成的回调,为true表示x5内核加载成功
                    //否则表示x5内核加载失败,会自动切换到系统内核。
                }
                @Override
                public void onCoreInitFinished() {
                }
            };
            //x5内核初始化接口
            QbSdk.initX5Environment(getApplicationContext(), cb);
        }
    

    重点来了,敲黑板了啊!

    接下来这一步很重要,但是很多同学可能会不太在意。他会给你提出一些解决方案。

    为了确保替换的完整,可以使用脚本checkqbsdk.sh 点击下载 进行扫描,windows 上使用TBSSdk接入扫描工具.exe 点击下载 进行扫描。脚本放在所有源码的顶级目录下运行即可。后续的版本发布前尽量都运行一遍扫描,以免上次扫描后新提交的代码有未替换的情况发生。替换不完全时,可能发生的问题是关于cookie的身份错误、类转换时的crash等。cookie问题产生的原理是:一段代码把cookie塞给了系统内核,另外一段代码尝试从x5的内核里读取cookie就失败了。类转换的错误产生的原理是:比如xml里指定的是系统的webview,java的代码里把它当作x5的webview使用。

    我一开始也不知道还有这种操作,直到我按照官方文档一步一步来,好吧,如果是刚刚把jar包放到项目巴拉巴拉的。上面的操作都做了,然后兴高采烈地去看水滴标志。然而,并没有出现。慢慢地,回到上面,看到了这段不太醒目的话,就下载了一个来TBSSdk接入扫描工具.exe检验的,记得解压出来再检验,不然无法生成txt文件。扫描完成,没有建议项,但是我去看,还是没有水滴标志。于是,我点了AS上面的那个锤子进行编译,结果还是失败了。

    扫描工具

    举个例子

    Alipay扫描

    回过去接着看文档,发现讲了一堆目前用不到的东西:

    cookie
    兼容视频播放
    输入法设置
    app 自定义 UA 的说明
    app混淆时的处理
    Tbs视频播放器接入说明
    

    我集成都还没成功,跟我讲这些,有啥用?于是我就把文档拉到底:

    五、加载 x5内核的操作方法

    1. 下载安装TBSDemo到手机 点击下载
    2. 启动 TBSDemo,等待几秒钟后看到提示框“x5内核安装成功,即将重启”,然后自动重启Demo;
    3. TBSDemo重启后,当看到左上角显示“x5 core:”,然后可进行下一步,否则请联系我们;
    4. 卸载重装您的App,保持手机网络畅通,进入您的App的网页场景,等待3秒后在手机设置里杀掉您的App,然后再次启动您的App 进入网页场景,此时您的App就可以使用x5内核了;备注说明:
      由于微信手Q下载X5内核会碰到流控等限制,操作门槛较高,所以通过前三步可以快速实现将TBSDemo中携带的X5内核部署到手机上。步骤四中判断X5内核是否启用,可以通过长按观察弹出菜单或文字选择的水滴效果确认已使用了 x5 内核
      辨别是否使用x5webview的方法:
      显示网页文字时,可通过长按选择文字的标识判断,如下水滴状选择效果是x5webview 的标志:
    Paste_Image.png

    还很恶心地用了王宝强的新闻蹭热度。

    好吧,下载他的TBSDemo运行,能出现x5 core提示。回头再打开自己的项目,ok了,出现了水滴标志,魅族MX6打开我们的网页也没有闪退,在其他机型上测试,加载速度和滑动效果大大提升。这是什么神操作???
      难道说,他自己不会下载X5内核?因为我前几次测试,都不成功。后面的时候是,第一次不成功,第二次打开就有了。搞不懂,后来多弄了几下,就行了。我反正是真的找不到原因。忘了说,我用的是这个版本的tbs_sdk_thirdapp_v3.3.0.1045_43300_sharewithdownload_withoutGame_obfs_20170605_170212.jar
      不知道其他版本会不会也是这样。反正我很久以前,那时候还要用key的时候,也是集成失败。百度一搜,话不多说自己感觉。

    百度搜素“腾讯X5内核”

    吐槽的链接就不贴了,大家用心灵去感受。毕竟这X5内核在我使用过程中没收费,虽然集成有很多坑,但是确实也解决了我的问题。总的来说,这次集成就这么稀里糊涂的成功了,能集成成功腾讯的东西我还是感到意外。共勉。

    相关文章

      网友评论

      本文标题:腾讯X5内核集成一些建议和爬坑记录

      本文链接:https://www.haomeiwen.com/subject/uaoqextx.html