前言
有的app可能会有这样的需求,需要在app中打开本地的word,excel等文档进行查看,我们在面对这样的需求的时候可能会一头雾水,不知道怎么来实现,这里给大家提供一种解决方案,那就是使用腾讯的浏览服务TBS(Tencent Browsing Service),TBS功能强大,查看文件只是其众多功能中的冰山一角,本文将带你一起揭开它的神奇面纱,你值得拥有!
为什么会有TBS?
腾讯TBS官网上的原话:“移动互联网时代,Web成为各超级App的通用基础技术。Web浏览不再局限于传统浏览器,相反已经进入绝大部分App的各类应用场景”。
上面所说的即就是腾讯TBS推出时的市场背景,其中讲的web浏览在app端就是使用WebView进行网页内容的浏览。
众所周知,安卓传统系统内核(WebView)存在适配成本高、不安全、不稳定、耗流量、速度慢、视频播放差、文件能力差等问题,这是移动应用开发商在进行Hybrid App开发时普遍面临的难题,针对以上问题,腾讯整合底层浏览技术和其平台资源及能力,为我们提供了一套更加全面的浏览解决方案,即TBS,至此TBS应运而生,其实我们可以这样理解:TBS就是为我们封装了一个功能更加强大的WebView:com.tencent.smtt.sdk.WebView。
TBS简介
系统原生的WebView用的是WebKit内核,而腾讯浏览服务TBS是基于腾讯X5内核的,TBS能够有效解决传统移动web技术面临的普遍问题,同时能极大扩展应用(Hybrid App)内浏览场景的服务能力,如果你的手机有安装QQ、微信、QQ浏览器等等QQ的产品, 这个内核就已经是已经安装到手机上了,TBS跟传统的WebView相比,具有以下优点:
- 速度快:相比系统webview的网页打开速度有30+%的提升;
- 省流量:使用云端优化技术使流量节省20+%;
- 更安全:安全问题可以在24小时内修复;
- 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
- 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
- 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
- 功能全:在Html5、ES6上有更完整支持;
- 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
- 视频和文件格式的支持x5内核多于系统内核
- 防劫持是x5内核的一大亮点
关于这些优点的详细讲解参见官方文档:https://x5.tencent.com/tbs/product/tbs.html
我们在这里主要提一下TBS的文件浏览服务能力支持,见下文。
TBS运行环境支持
1.手机ROM版本高于或等于2.2版本
2.手机RAM大于500M,该RAM值通过手机 /proc/meminfo 文件的MemTotal动态获取
注:如果不满足上述条件,SDK会自动切换到系统WebView,SDK使用者不用关心该切换过程。
TBS文件浏览服务支持
1.文件服务-格式支持
APP在接入文件服务后,即可支持主流9种格式。升级文件服务后,可支持46种文件格式。为用户提供最全的文件浏览支持!
同时支持26种视频格式。
2.文件服务-文件查看&文件管理器
在文件浏览器基础上,提供最近文件打开、文件管理等个人文件管理。文件管理能力,对本地文件进行智能分类,以直观的宫格形式展示给用户,美观、高效。
3.文件服务-文档编辑和预览
为文档用户,提供更细分的能力——xlsx编辑、PPT放映等实用能力,丰富文件浏览能力,提升办公、学习效率。
TBS的集成
1.首先下载最新的SDK:Android SDK(完整版) ,里面包含所需要的jar包以及官方demo,我们所要做的是:
1.1.将jar包放到项目的lib文件夹,右键add as library
1.2.直接复制Demo里面的文件夹jniLibs,到项目的src/main/jniLibs。
注意:此处需要对.so文件进行配置,由于X5暂时不提供64位so文件,但是现在绝大部分手机都是64位的,所以为了保证64位手机能正常加载x5内核,需要进行如下配置:
首先:在app的build.gradle文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加)添加如下配置: ndk{abiFilters “armeabi”},如果配置后编译报错,那么需要在gradle.properties文件中加上Android.useDeprecatedNdk=true;
defaultConfig {
...
//配置so文件
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
2.添加权限
<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" />
3.初始化x5内核
App 在启动后(例如在 Application 的 onCreate 中)立刻调用 QbSdk 的预加载接口 initX5Environment ,可参考接入示例,第一个参数传入 context,第二个参数传入 callback,不需要 callback 的可以传入 null,initX5Environment 内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App 启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了。
public class BaseApplicatiom extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化X5内核
QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
@Override
public void onCoreInitFinished() {
//x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
}
@Override
public void onViewInitFinished(boolean b) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.e("@@","加载内核是否成功:"+b);
}
});
}
}
TBS的使用
未完待续。。。。
怎么判断他是使用X5内核还是自带内核呢?
显示网页文字时,可通过长按选择文字的标识判断,如下水滴状选择效果是x5webview的标志:
TBS混淆设置
jar包本来就已经是混淆好的了,如果你打包时候没有添加规则再混淆一遍的话,就会无法使用x5内核了。所以需要添加混淆规则:
下载混淆文件:http://res.imtt.qq.com/TES/proguard.zip
解压后用文本编辑器打开,复制里面的内容到你项目的proguard-rules.pro混淆文件即可。