本文静态集成方案有问题,可参考
TBS文件浏览自主安装内核方案
序言
TBS的好处我就不多说了,此篇文章是关于TBS的静态集成,如果想要动态集成的话,可以参考我的另一篇文章
TBS腾讯浏览服务接入以及遇到的坑
。静态集成最大的坏处就是包会特别的大,应该会增加30M左右,如果不想要的话可以看我的另一篇文章。想要静态集成的伙伴多数都是因为有些时候,内核会因为一些不知道什么原因不会下载或者加载内核,但是如果是静态的话就一定可以使用x5内核。这个下载加载的问题,我在另一篇文章中也有解决方案。
如果不想看下面文章的,可以直接下载我的demo,直接运行即可。想使用的话复制我里面的代码就可以直接使用了。
Demo地址
准备工作
先下载2个东西,下面我会一一解释。
1.下载TBS加载的jar包。
静态集成jar下载地址
。提取码:1898
2.下载内核所需要的so文件。
下载地址
开始集成
在下载完TBS加载的jar包后,应该是下图的这个名字。将这个JAR包放在lib里面。
在build.gradle文件中,添加以下配置。
ndk {
abiFilters /*"armeabi",*/"armeabi-v7a","x86"
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
java.srcDirs = ['src/main/java']
}
}
implementation fileTree(include: ['*.jar'], dir: 'libs')
新建一个jniLibs,在里面新建一个armeabi-v7a文件夹。如图所示
找到下载好的内核所需要的so文件的那个文件,tbs_core_045434_20201214164517_nolog_fs_obfs_release.tbs,将后面的tbs改成zip,解压打开。如果所示
将lib里面的文件全部复制到armeabi-v7a文件中。
到此文件的处理等工作就完成了。剩下的就是代码集成了。新建一个类集成Application,在onCreate中初始化TBS。
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
initTBS();
}
public void initTBS() {
QbSdk.preinstallStaticTbs(getApplicationContext());
QbSdk.setTbsListener(new TbsListener() {
@Override
public void onDownloadFinish(int i) {
// 下载结束时的状态,下载成功时errorCode为100,其他均为失败,外部不需要关注具体的失败原因
Log.i("QbSdk", "onDownloadFinish -->下载X5内核完成:" + i);
Log.i("QbSdk", "onDownloadFinish---是否可以加载X5内核: " + QbSdk.canLoadX5(App.this));
}
@Override
public void onInstallFinish(int i) {
// 安装结束时的状态,安装成功时errorCode为200,其他均为失败,外部不需要关注具体的失败原因
Log.i("QbSdk", "onInstallFinish -->安装X5内核进度:" + i);
Log.i("QbSdk", "onInstallFinish---是否可以加载X5内核: " + QbSdk.canLoadX5(App.this));
}
@Override
public void onDownloadProgress(int i) {
// 下载过程的通知,提供当前下载进度[0-100]
Log.i("QbSdk", "onDownloadProgress -->下载X5内核进度:" + i);
Log.i("QbSdk", "onDownloadProgress---是否可以加载X5内核: " + QbSdk.canLoadX5(App.this));
}
});
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onCoreInitFinished() {
// 内核初始化完毕
Log.i("QbSdk", "onCoreInitFinished ");
Log.i("QbSdk", "onCoreInitFinished---是否可以加载X5内核: " + QbSdk.canLoadX5(App.this));
}
@Override
public void onViewInitFinished(boolean arg0) {
// x5內核初始化完成的回调,true表x5内核加载成功,否则表加载失败,会自动切换到系统内核。
Log.i("QbSdk", " 内核加载 " + arg0);
Log.i("QbSdk", "onViewInitFinished---是否可以加载X5内核: " + QbSdk.canLoadX5(App.this));
}
};
// x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
}
}
记得在AndroidManifest中添加名字。
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jackfruit.tbslocalwebview"
>
<!-- 写入扩展存储,向扩展卡写入数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".App"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.TBSLocalWebview"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TBSDebugWebActivity" />
<activity android:name=".PreviewAttachmentActivity" />
</application>
</manifest>
有一点不能忘了,这几个权限是一定要添加的。不然使用不了。到此就可以使用内核了。在我的demo中我都有打log查看是否加载成功,大家可以看下日志是否加载完成。过滤条件输入QbSdk即可。
现在来解释一下下载的那两个地址。
第一个是TBS加载内核的jar包,那个是最后一个静态加载的版本,直接下载即可。
第二个是内核的so文件,可以这么获取。使用webview打开http://debugtbs.qq.com
打开就是这个页面,但是我发现普通的webview打不开这个地址,页面提示说是不是x5内核,不能打开。所以可以这样,先照着我的另一篇文章
TBS腾讯浏览服务接入以及遇到的坑
,打开那个页面。然后点击安装线上内核。
在打印台可以看下这个地址。
内核下载地址
在我的demo中有打开文件的例子,使用的是TbsReaderView。可以打开pdf,docx等文件。以上就是全部内容。最后再一次附上demo地址,里面包含了静态与动态集成TBS。
欢迎订阅
我的博客
,坚持总是会看到希望的。