三、SDK集成步骤

1. 第一步

下载 SDK jar 包放到工程的libs目录下,将源码和XML里的系统包和类替换为SDK里的包和类,具体对应如下:

系统内核

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

需要注意的是:

1)请不要在代码里使用下述写法:

import android.*;

import android.webkit.*;

import android.webkit.WebStorage.*;

import android.net.*;

import android.net.http.*;

2)除了源码里需要把相关的包名和类名进行替换,布局xml里的声明也需要替换,例如:

android:id="@+id/forum_context"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="5dp"

android:paddingRight="5dp" />

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

2. 第二步

3. 第三步

AndroidManifest.xml里加入权限声明:

4. 第四步

优化异常上报:

为了提高合作方的webview场景稳定性,及时发现并解决x5相关问题,当客户端发生crash等异常情况并上报给服务器时请务必带上x5内核相关信息。x5内核异常信息获取接口为:com.tencent.smtt.sdk.WebView.getCrashExtraMessage(context)。以bugly日志上报为例:

UserStrategy strategy = new UserStrategy(appContext);

strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {

public Map onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {

LinkedHashMap map = new LinkedHashMap();

String x5CrashInfo = com.tencent.smtt.sdk.WebView.getCrashExtraMessage(appContext);

map.put("x5crashInfo", x5CrashInfo);

return map;

}

@Override

public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType, String errorMessage, String errorStack) {

try {

return "Extra data.".getBytes("UTF-8");

} catch (Exception e) {

return null;

}

}

});

CrashReport.initCrashReport(appContext, APPID, true, strategy);

5. 第五步

适配修改:

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();

6. 第六步

调整cookie的使用:

com.tencent.smtt.sdk.CookieManager和com.tencent.smtt.sdk.CookieSyncManager的相关接口的调用,在接入SDK后,需要放到创建X5的WebView之后(也就是X5内核加载完成)进行;否则,cookie的相关操作只能影响系统内核。

7. 第七步

兼容视频播放:

1)享受页面视频的完整播放体验需要做如下声明:

页面的Activity需要声明android:configChanges="orientation|screenSize|keyboardHidden"

2)视频为了避免闪屏和透明问题,需要如下设置

a)网页中的视频,上屏幕的时候,可能出现闪烁的情况,需要如下设置:Activity在onCreate时需要设置:

getWindow().setFormat(PixelFormat.TRANSLUCENT);(这个对宿主没什么影响,建议声明)

b)在非硬绘手机和声明需要controller的网页上,视频切换全屏和全屏切换回页面内会出现视频窗口透明问题,需要如下设置

声明当前false为不透明。

特别说明:这个视各app情况所需,不强制需求,如果声明了,对体验更有利

c)以下接口禁止(直接或反射)调用,避免视频画面无法显示:

webview.setLayerType()

webview.setDrawingCacheEnabled(true);

8. 第八步

输入法设置

避免输入法界面弹出后遮挡输入光标的问题

方法一:在AndroidManifest.xml中设置

android:windowSoftInputMode="stateHidden|adjustResize"

方法二:在代码中动态设置:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

9. 第九步

app 自定义 UA 的说明

如果 app 需要自定义 UA,建议采取在 SDK 默认UA 后追加 app UA 的方式示例:

webSetting.setUserAgentString(webSetting.getUserAgentString() + APP_NAME_UA);

其中 APP_NAME_UA 是 app 自定义 UA

10. 第十步

app混淆时的处理

由于我们提供的 TBS jar 已经混淆过,所以 App 混淆时可以不再混淆我们的 TBS jar,或者也可以把我们的混淆策略 proguard 点击下载 加入 App 的混淆策略里注意:如果 App没有按照该规则混淆了 TBS jar,可能导致无法使用 x5内核

android 集成x5内核时 本地没有,腾讯浏览服务-接入文档相关推荐

  1. TBS腾讯浏览器服务x5内核打开本地doc(doc docx xlsx pdf ppt)文档(官网最新43903版本SDK)

    目前最新版本(官网最新43903版本SDK)仅支持本地文件查看 测试Demo:TBS腾讯浏览器服务x5内核打开本地doc(docdocxxlsxpdfppt)文档(官网最新43903版本SDK)-互联 ...

  2. Android WebView相册选取图片及集成(X5内核,crosswalk)

    webview加载商城连接地址,系统webview的加载商城里的一个分类页面卡顿,其余页面正常. 自己写webview显然不现实,继承系统的写出来效果还是如此,然后就集成了腾讯X5的内核. TBS(腾 ...

  3. Android使用腾讯浏览服务X5内核

    [前期准备] 腾讯X5 jar包下载地址 [点击打开] 本次完整DEMO源码 [打开Github] [集成步骤] 第一步:下载jar包添加到项目 第二步:添加权限 [java] view plainc ...

  4. 腾讯浏览服务X5内核集成

    腾讯浏览服务X5内核集成 导读 1.什么是X5内核? 2.需求场景 3.开始搬砖 4.优化 5.集成后的问题 6.补充 一.什么是X5内核? 用官方文档的话说,就是解决系统webview兼容性差.加载 ...

  5. TencentTbs腾讯浏览服务 x5内核使用

    Tencent TBS (下简称TBS) 腾讯浏览服务 What is it? 百度百科解释: 腾讯浏览服务(Tencent Browsing Service,以下简称TBS),由腾讯X5浏览服务升级 ...

  6. Android集成Huawei PUSH(一)——华为推送服务简介

    Android集成Huawei PUSH(一)--华为推送服务简介 一.华为推送服务简介 华为推送服务(Huawei PUSH)是华为为开发者提供的消息推送平台,创建了一条从云端到用户客户端的消息推送 ...

  7. Android 应用内打开Word、Excel、PPT、PDF等文档

    Android平台中,可以使用以下几种方式打开Word和Excel文档: 预览图: 一:直接上传给第三方之后用webview打开 1.微软: https://view.officeapps.live. ...

  8. Android应用内展示office文件--腾讯浏览服务(TBS)

    前一篇写了用webview加载预览office文件,但是没有成功,所以只能另寻办法,上网查到了TBS(腾讯浏览服务),完美的解决了android端预览offic文件: 什么是TBS  依托 X5 内核 ...

  9. Android Studio 使用腾讯浏览服务(替换掉系统自带的WebView)

    一.为何不直接使用内置的WebView组件? 用Android自带的WebView组件,做过一些较复杂应用的人应该都会发现,这个自带的组件很多时候真是让人无力吐嘈,主要理由有二: Android中的W ...

最新文章

  1. html display布局,Web布局:display属性
  2. 学习C语言必须知道的理论知识(第二章-算法)
  3. 尚硅谷spring和spring boot笔记_手机标准内存达12G,比笔记本电脑还高!可为何系统总能占一半?...
  4. iOS逆向之Protocol Witness Table的汇编实现原理
  5. 前端Ajax/JS/HTML+后端SpringMVC(二)
  6. tolua打包Android后路径出错,unity+tolua 64位android崩溃排查过程记录
  7. R Markdown 使用方法笔记
  8. JFinal自动扫描表绑定model(包含jar包扫描)
  9. HCIE-Security Day4:安全策略和状态检测
  10. IntelliJ IDEA中激活JRebel插件
  11. 猿编程python代码_猿编程怎么练习编程 让你提前熟悉代码
  12. 计算机安装win10系统还原,详细教您win10怎么还原成win7
  13. 牛客网--14405--齐齐录成绩
  14. 读文献——《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
  15. 西南大学2019春计算机作业答案,2019年西南大学作业答案[1175]《仪器分析》
  16. 二维点集求外轮廓Java_从二维点集重建平面形状-浅议凹包算法
  17. 腾讯云Elasticsearch集群多可用区容灾实现原理及最佳实践
  18. 微信小程序radio单选框
  19. proteus元件大全 仿真元件 电子元器件英文缩写
  20. 华为电脑管家装到D盘_科普 | 电脑C盘满了,不想重新分区怎样扩容?我教你

热门文章

  1. Linux下的LD_PRELOAD环境变量与库打桩
  2. linux恢复终端默认配置,以gnome-terminal为例,修改gnome3 的默认配置,
  3. Docker Dockerfile详解
  4. 算法题学到的一些小语言细节
  5. [算法总结] 13 道题搞定 BAT 面试——字符串
  6. 安装ORACLE 时报错 /jre/1.4.2/lib/i386/libawt.so:
  7. 例题 3-5 生成元 digit generator
  8. SQL Server 跨网段(跨机房)复制
  9. windows phone 学习(4)
  10. UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2