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会自动切换到系统WebView,SDK使用者不用关心该切换过程。

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: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. 第二步

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: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" />

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<String, String> onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {

LinkedHashMap<String, String> map = new LinkedHashMap<String, 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 的可以传入 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的相关操作只能影响系统内核。

第一次启动x5内核浏览器的缓慢的解决方案:

1.

a) 设置开启优化方案

// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案

HashMap<String, Object> map = new HashMap<String, Object>();

map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);

QbSdk.initTbsSettings(map);

b) 增加Service声明

<!--     在AndroidManifest.xml中增加内核首次加载时优化Service声明;    该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务,任务完成后自动结束。  --><service

android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"

android:label="dexopt"

android:process=":dexopt" ></service>

无法加载x5内核的解决方案

  • 如何判断已加载了x5内核?
    1. webview的getX5WebViewExtension()返回非null表示已加载了x5内核webview
    2. 您的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.useDeprecatedNdk=true;
(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微信支付---这个不错

Android studio 接入腾讯TBSx5内核的解决方案相关推荐

  1. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即"从文 ...

  2. Android开发-在Android里接入腾讯云推流SDK实现直播推流的功能

    前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...

  3. Android Studio 编译: Program type already present: XXX 解决方案

    Android Studio 编译: Program type already present: XXX 解决方案 参考文章: (1)Android Studio 编译: Program type a ...

  4. Android Studio中app出现红叉的解决方案

    Android Studio中app出现红叉的解决方案 如果你在网上搜索了一大圈之后发现还是没有解决你的问题,或许这篇文章能帮到你,同事的开发环境中遇到了,处理了一下午,期间包括删除工具,重装sdk等 ...

  5. android studio app叉号,Android Studio中app出现红叉的解决方案

    原标题:Android Studio中app出现红叉的解决方案 如果你在网上搜索了一大圈之后发现还是没有解决你的问题,或许这篇文章能帮到你,同事的开发环境中遇到了,处理了一下午,期间包括删除工具,重装 ...

  6. android安卓接入腾讯X5浏览器内核TBS基本使用,配置腾讯TBS

    更多其他页面-自定义View-实用功能合集:点击查看 使用腾讯Tbs,会导致上架google应用商城失败! 关于X5内核的一些bug解决,可以查看这些文章: 链接: 解决bug. 安卓原生webvie ...

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

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

  8. Android 快速接入腾讯云人脸核身(识别)

    Android 通过 SDK 快速接入腾讯云人脸核身 我的接入代码:https://blog.csdn.net/qq_39836064/article/details/108702725,很久之前写的 ...

  9. Android studio接入高德SDK(1)--获取地址信息

    1.创建一个Empty Activity 的应用项目 a.File->New->New Project b.选择Phone and Table -> Empty Activity - ...

最新文章

  1. leangoo领歌敏捷工具工作台可查看最近访问脑图和项目
  2. 独家 | 浅谈Python/Pandas中管道的用法
  3. 2022-01-12
  4. 关于springBoot post请求参数过大导致后端接收不到参数问题
  5. Boostrap技能点整理之【网格系统】
  6. 在SQL中使用DEFAULT约束
  7. lintcode 最大子数组III
  8. python快速求EXCEL数据权重
  9. SQL约束和字段约束的创建和删除
  10. monkey命令详解(二)
  11. 进程管理之工作管理详解(job control)
  12. 时间排序处理在微信小程序和真机调试没问题,发布体验版后未执行
  13. Mac/iOS开发工程师 常用的软件 史上最全版
  14. html打开lync客户端,在 Skype for Business 与 Lync 客户端用户界面之间切换
  15. 如何将html的按钮做成圆角,HTML 圆角按钮的实现备忘
  16. 渗透基础学习-信息搜集
  17. 微信PC端技术研究(2)-拿下语音
  18. HANA 如何创建XS Job来完成定时任务
  19. java 批次号,java重复批次执行
  20. 农业物联网的道路上,还有个联想的身影

热门文章

  1. html页面封装是什么,javascript封装是什么?
  2. DVPP媒体数据处理图片解码问题案例
  3. 数据管理软件成为开店助手
  4. 如何理解分布式paxos协议
  5. SQL语句插入日期格式数据
  6. windows CMD 命令下dir 命令
  7. Centos8.5 阿里云ECS服务器部署python tornado项目(二)服务器安装与配置Python3环境
  8. 电子沙盘数字沙盘虚拟现实可视化系统开发教程第4课
  9. Python学习之余,摸摸鱼
  10. 2021-08-19 WPF控件专题 Expander 控件详解