腾讯TBS内核手动下载集成
2023-02-22 本文已影响0人
CoderUp
TBS使用场景
项目内有文档预览功能,使用TBS进行文档预览功能实现;(我所开发的项目,使用的到的只是TBS里的这一项功能,TBS是致力于提供优化移动端浏览体验的整套解决方案,具体功能清单,详见官方网站 )
遇到的问题
测试人员反馈偶现内核下载不成功,过一阵又能下载成功了,确定不是公司网络和设备的原因;
问题排查
根据官方集成文档,检查SDK集成代码,确认集成无误;查阅资料得知,TBS 官方由于成本CDN控制原因,不能保证内核100%下发成功;

解决思路及方式
TBS 官方无法保证内核100%下发成功,所以内核下发的操作,自己来做;
具体步骤:
- 获取到TBS内核(分为32、64位两种,我拿到的内核放在网盘上了,有需要的,文末自取);按照官方集成文档,进行SDK的集成,首次打开app的时候,会进行内核的下载,下载完成后,可以在data/data/你的应用包名下/app_tbs/core_private目录下,找到一个名为x5.tbs的文件,大小为40M左右,将此文件拷贝到下来,并添加上.apk后缀。
- 将内核放到自家服务器上,或者直接放在项目assets目录下,打包到apk中(32位、64位两个内核,共70M多点);
- app启动后,从服务端下载内核文件或从assets目录中拷贝内核文件到本地;此处需要根据当前运行的apk包为32或64位,来加载对应的内核;获取当前apk位数代码如下:
private boolean is32BitAbi() {
String relativePath = "";
String nativeLibraryDir = getApplicationInfo().nativeLibraryDir;
if (!TextUtils.isEmpty(nativeLibraryDir)) {
if (nativeLibraryDir.endsWith("/lib/arm64")) {
relativePath = "lib/arm64-v8a";
} else if (nativeLibraryDir.endsWith("/lib/arm")) {
relativePath = "lib/armeabi-v7a";
}
}
LogUtils.i("abi_type", relativePath);
return "lib/armeabi-v7a".equals(relativePath);
}
- TBS初始化时,直接加载本地内核
QbSdk.installLocalTbsCore(getApplicationContext(), 46141, x5TbsPath);
其中第二个参数,是内核对应的版本,第三个参数是内核的绝对路径;
除了上面这个方法,TBS SDK的初始化过程仍需参照官方文档进行,但不需要执行内核的下载操作,即下面这个方法不需要执行
TbsDownloader.startDownload(this);
- 首次加载内核成功后,用户后续打开时,不需要再此进行内核的下载和加载操作,可根据
QbSdk.canLoadX5(this)
作为是否需要进行内核加载的条件。
温馨提醒
-
内核对应TBS SDK版本为44275,由于后续的版本中,TBS将TbsReaderview移除,所以新版TBS中已不再包含文档预览功能,如需使用文档预览功能,需要选择TBS SDK 44275及之前的版本,或者使用TBS 拆分出来的、单独的文档预览SDK Tencent Browsing Service(收费)。
-
内核地址:https://pan.baidu.com/s/1G8iEJabYBwVrqqIEnK1WAg?pwd=vfg5
-
自行获取内核时,记得更改 abiFilters ,以获取32、64位两种情况下,对应的内核。
-
区分当前应用为32、64位的代码,没有找到较为权威的api,使用的时候,还请自行验证准确性。