网站刷新新前台是什么意思,龙华龙岗光明最新通告,网站的建设模式是指什么时候,游戏行业seo整站优化Android studio 接入腾讯TBSx5内核的解决方案 首页我们查看一下腾讯浏览服务的官网#xff1a; https://x5.tencent.com/tbs/guide/sdkInit.html 二、背景知识
1. TBS(腾讯浏览服务)的优势
1) 速度快#xff1a;相比系统webview的网页打开速度有30%的提升#xff1b… Android studio 接入腾讯TBSx5内核的解决方案 首页我们查看一下腾讯浏览服务的官网 https://x5.tencent.com/tbs/guide/sdkInit.html 二、背景知识
1. TBS(腾讯浏览服务)的优势
1) 速度快相比系统webview的网页打开速度有30%的提升
2) 省流量使用云端优化技术使流量节省20%
3) 更安全安全问题可以在24小时内修复
4) 更稳定经过亿级用户的使用考验CRASH率低于0.15%
5) 兼容好无系统内核的碎片化问题更少的兼容性问题
6) 体验优支持夜间模式、适屏排版、字体设置等浏览增强功能
7) 功能全在Html5、ES6上有更完整支持
8) 更强大集成强大的视频播放器支持视频格式远多于系统webview
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
2. 运行环境
1)手机ROM版本高于或等于2.2版本
2)手机RAM大于500M该RAM值通过手机 /proc/meminfo 文件的MemTotal动态获取
注如果不满足上述条件SDK会自动切换到系统WebViewSDK使用者不用关心该切换过程。
3. SDK尺寸指标
1)SDK提供的JAR包约250K
三、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里的声明也需要替换例如
com.tencent.smtt.sdk.WebView
android:idid/forum_context
android:layout_widthfill_parent
android:layout_heightfill_parent
android:paddingLeft5dp
android:paddingRight5dp /
为了确保替换的完整可以使用脚本checkqbsdk.sh 点击下载 进行扫描windows 上使用TBSSdk接入扫描工具.exe 点击下载 进行扫描。脚本放在所有源码的顶级目录下运行即可。后续的版本发布前尽量都运行一遍扫描以免上次扫描后新提交的代码有未替换的情况发生。替换不完全时可能发生的问题是关于cookie的身份错误、类转换时的crash等。cookie问题产生的原理是:一段代码把cookie塞给了系统内核另外一段代码尝试从x5的内核里读取cookie就失败了。类转换的错误产生的原理是比如xml里指定的是系统的webviewjava的代码里把它当作x5的webview使用。
2. 第二步
x5暂时不提供64位so文件为了保证64位手机能正常加载x5内核请参照如下链接修改相关配置https://x5.tencent.com/tbs/technical.html#/detail/sdk/1/34cf1488-7dc2-41ca-a77f-0014112bcab7
3. 第三步
AndroidManifest.xml里加入权限声明
uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE /
uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE /
uses-permission android:nameandroid.permission.ACCESS_WIFI_STATE /
uses-permission android:nameandroid.permission.INTERNET /
uses-permission android:nameandroid.permission.READ_PHONE_STATE /
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 MapString, String onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {
LinkedHashMapString, String map new LinkedHashMapString, String();
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 的可以传入 nullinitX5Environment 内部会创建一个线程向后台查询当前可用内核版本号这个函数内是异步执行所以不会阻塞 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的相关操作只能影响系统内核。
第一次启动x5内核浏览器的缓慢的解决方案
1.
a) 设置开启优化方案
// 在调用TBS初始化、创建WebView之前进行如下配置以开启优化方案
HashMapString, Object map new HashMapString, Object();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
QbSdk.initTbsSettings(map);
b) 增加Service声明
!-- 在AndroidManifest.xml中增加内核首次加载时优化Service声明 该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务任务完成后自动结束。 --service android:namecom.tencent.smtt.export.external.DexClassLoaderProviderService
android:labeldexopt
android:process:dexopt /service 无法加载x5内核的解决方案
如何判断已加载了x5内核1. webview的getX5WebViewExtension()返回非null表示已加载了x5内核webview2. 您的app打开网页http://soft.imtt.qq.com/browser/tes/feedback.html显示000000表示加载的是系统内核显示大于零的数字表示加载了x5内核该数字是x5内核版本号如果您的App接入TBS后无法加载x5内核请继续往下阅读TBS主要通过共享使用微信手Q的内核而加载x5内核您的手机是否没有内核源1. 手机安装微信微信扫下面的二维码打开网页如果显示的数字是00000说明您的手机微信没有安装内核下面我们来给微信安装一个内核 2. 您的手机微信扫下面的二维码安装内核43906版本安装完成后把您的App卸载重装下看看是否可以加载x5内核了 补充说明线上用户的手机98%都有安装微信且微信已安装x5内核您的App接入了TBS后会去共享使用微信的x5内核往往开发人员的测试手机由于不经常使用微信或者调试原因导致微信没有安装x5内核另外线上剩余2%的用户没有微信内核源的情况TBS也会在wifi条件下自己下载内核不过这是小众场景了。 64位手机无法加载x5(libmttwebview.so is 32-bit instead of 64-bit)
x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行。具体操作如下1.如果使用是Eclipse则需要将所有的.so文件都放置在so加载目录lib/armeabi文件夹下(没有该目录则新建一个AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,如果没有合适的so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件)lib文件夹下不要有其他以”armeabi“开头的文件夹。2.如果使用的是 Android studio则需要进行两项配置(1)打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加)添加如下配置: ndk{abiFilters armeabi}如果配置后编译报错那么需要在gradle.properties文件中加上Android.useDeprecatedNdktrue(2)找出build.gradle中配置的so加载目录:jniLibs.srcDir:customerDir,如果没有该项配置则so加载目录默认为src/main/jniLibs需要将.so文件都放置在so加载目录的armeabi文件夹下(没有该目录则新建一个AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下如果没有合适的so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件)so加载目录下不要有其他以”armeabi“开头的文件夹。如果仍未能解决您的问题请直接在论坛回复并描述您的问题
如图所示 例外还有一些测试的地址 result http://so result http://soft.imtt.qq.com/browser/tes/feedback.html; //测试x5内核的运行情况---运行测试结果是04408result https://wxpay.wxutil.com/mch/pay/h5.v2.php;//测试html5微信支付
ft.imtt.qq.com/browser/tes/feedback.html; //测试x5内核的运行情况---运行测试结果是04408 result https://wxpay.wxutil.com/mch/pay/h5.v2.php;//测试html5微信支付 腾讯X5 兼容之后支持html5微信支付---这个不错