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

三、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内核

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java vector_Java Vector sureCapacity()方法与示例

java vector向量类别sureCapacity()方法 (Vector Class ensureCapacity() method) ensureCapacity() method is available in java.util package. sureCapacity()方法在java.util包中可用。 ensureCapacity() method is used to ensure the capacity of this Vector when requi…

Tcl与Design Compiler (十二)——综合后处理

本文如果有错,欢迎留言更正;此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作,这里就集中讲一下DC完成综合了,产生了…

Java短类的compareTo()方法和示例

简短的类compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Short object against the given Short obj…

四则运算网页版

一.设计思想: 1)写出一个菜单界面,有两个选项一个是分数,一个是整数。 2)而这两个标签后面则是转向其更详细的菜单,题目数量,有无括号,运算的项数等等详细功能,再点击这两…

Java RandomAccessFile seek()方法与示例

RandomAccessFile类seek()方法 (RandomAccessFile Class seek() method) seek() method is available in java.io package. seek()方法在java.io包中可用。 seek() method is used to sets the file pointer position calculated from the starting of this file at which the …

Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

一、Js简介和入门 继续跟进JS开发的相关教程。 <!-- [使用JS的三种方式] 1、HTML标签中内嵌JS&#xff08;不提倡使用&#xff09;&#xff1a; 示例&#xff1a;<button οnclick"javascript:alert(你真点啊&#xff01;)">有本事点我呀&#xff01;&#…

android 颜色范围,Android系统颜色的适用范围

###All Clickable Views:ripple effect (Lollipop only) — “colorControlHighlight”###Status Bar:background (Lollipop only) – “colorPrimaryDark”###Navigation Bar:background (Lollipop only) – “android:navigationBarColor”###EditText:underline (unfocused)…

bytevalue_Java Short类byteValue()方法及示例

bytevalue短类byteValue()方法 (Short class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Short object converted to type byte (by …

分布式交换机配置备份和还原

1.备份和还原vSphere Distributed Switch配置 1.1导出 vSphere Distributed Switch 配置 可以将 vSphere Distributed Switch 和分布式端口组配置导出到某一文件。该文件保留有效的网络配置&#xff0c;使这些配置能够传输至其他环境。 步骤&#xff1a; 1) 在 vSphere Web Cli…

html自动执行函数,JS 自执行函数原理及用法

js自执行函数&#xff0c;听到这个名字&#xff0c;首先会联想到函数。接下来&#xff0c;我来定义一个函数&#xff1a;function aaa(a,b){return sum a b}定义了一个名为aaa的函数&#xff0c;在里面可以计算两个数的和。如果想执行它&#xff0c;就必须得调用它&#xff0…

java reverse_Java Integer类reverse()方法与示例

java reverse整数类reverse()方法 (Integer class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to returns the value generated by reversing the order of bits in binary 2s comp…

华为鸿蒙系统好在哪,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上&#xff0c;华为消费业务CEO 余承东&#xff0c;正式发布鸿蒙OS2.0&#xff0c;并宣布华为鸿蒙OS将全面启用全场景生态&#xff0c;并将于2020年12月发布手机版。余承东还表示&#xff0c;明年&#xff0c;华为的智能手机将全面升级&#xff0c;以支持鸿蒙操…

Java GregorianCalendar add()方法与示例

GregorianCalendar类的add()方法 (GregorianCalendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to add the given quantity to the specified GregorianCalendar field (fi). add()方法用于…

JVM(三)——对象的访问定位

JVM&#xff08;三&#xff09;——对象的访问定位创建完对象&#xff0c;到了使用对象的时候&#xff0c;通常声明一个同类型的引用指向该类型的对象&#xff0c;由这个引用来操作对象的字段、方法等。 Object obj new Object();复制代码我们的Java程序需要通过栈上的 refere…

html5滑动删除置顶,html5向左滑动删除特效

html5向左滑动删除特效* {padding: 0;margin: 0;list-style: none;}header {background: #f7483b;border-bottom: 1px solid #ccc}header h2 {text-align: center;line-height: 54px;font-size: 16px;color: #fff}.list-ul {overflow: hidden}.list-li {line-height: 60px;bord…

Java Double类hashCode()方法及示例

双类hashCode()方法 (Double class hashCode() method) hashCode() method is available in java.lang package. hashCode()方法在java.lang包中可用。 hashCode() method is used to return hashcode of the Double-object. hashCode()方法用于返回Double对象的哈希码。 hashC…

Java DataOutputStream size()方法及示例

DataOutputStream类的size()方法 (DataOutputStream Class size() method) size() method is available in java.io package. size()方法在java.io包中可用。 size() method is used to return the size of this stream or in other words, we can say it returns the value of…

html怎样让列表向下移动,Html无序列表ul控件实现行上下移动.

new document // 创建一个ulvar ul document.createElement("ul");ul.id "oList";// 创建divvar div document.getElementById(mergeCase);// 把ul放置到div中div.appendChild(ul);// 遍历所有的li条目function trace(){var strTest "";for …

创建laravel项目

下载项目到本地 git clone https://github.com/251068550/LaraBlog.gitcompoer安装 cd LaraBlog composer install如果composer install安装很慢&#xff0c;推荐安装国内镜像 执行 composer config -g repo.packagist composer https://packagist.phpcomposer.com 配置.env文件…

Java ArrayList removeRange()方法与示例

ArrayList类removeRange()方法 (ArrayList Class removeRange() method) removeRange() method is available in java.util package. removeRange()方法在java.util包中可用。 removeRange() method is used to remove the elements whose range is between st_in(start index)…