Android集成腾讯TBS_X5内核的一些解决方法
关于我开发中遇到的问题,主要还是不够细心导致的,官方文档写的也没很清楚,但是还是分享出来一下,让新手可以少走弯路,也防止自己忘记了。主要有下面几个问题:
1).我测试环境集成了,但是打包正式的时候居然没有集成成功,还是启用系统内核。
解决方案: 下面集成步骤1.3 混淆配置,因为正式签名混淆了,导致不成功的问题。
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**-keep class com.tencent.smtt.** {*;
}-keep class com.tencent.tbs.** {*;
}
2).集成OK了,但是打包正式的,还是没办法一进入就启用X5
解决方案:正如它官方文档介绍的集成成功了,不一定会使用内核X5,所以我在Application初始化的时候,添加判断下,是否需要重置化SDK,有可能没加载成功或者中途退出去导致的不成功。
boolean need = TbsDownloader.needDownload(this, false);
//是否需要下载内核,作用比较奇葩
//该方法会在完全没下载的时候返回true,在
//加载完成和存在缓存无法继续下载时返回flase
//这个方法可以用来判断是否存在缓存需要重置
if(need && Network.isAvailable(this)){// 判断网络是否可用Tip.toast("reset X5");//重置化sdk,这样就清除缓存继续下载了QbSdk.reset(this);//手动开始下载,此时需要先判定网络是否符合要求TbsDownloader.startDownload(this);
}
3).启用了,但是第一次会回调显示下载完成,第二次进入App才会回调显示成功
解决方案:这个也是我搜索蛮多资料,别人问的最多的问题。可是解决方法都是说手动安装内核或者让它自动加载完再去让他加载h5页面。但是有没有办法让他自动下载呢?然后呢,我就在内核下载进度回调的方法,和监听预初始化方法里面做自动下载的操作。具体操作步骤如下
QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {@Overridepublic void onCoreInitFinished() {// 内核初始化完成,可能为系统内核,也可能为系统内核Log.e("app", " onCoreInitFinished");Tip.toast("onCoreInitFinished");}/*** 预初始化结束* 由于X5内核体积较大,需要依赖网络动态下发,所以当内核不存在的时候,默认会回调false,此时将会使用系统内核代替* @param isX5 是否使用X5内核*/@Overridepublic void onViewInitFinished(boolean isX5) {Log.e("app", " onViewInitFinished is isX5?" + isX5);Tip.toast("onViewInitFinished is isX5?" + isX5);if (!isX5 && Network.isAvailable(App.this.getApplicationContext())) {// 判断网络是否可用//重置化sdk,这样就清除缓存继续下载了QbSdk.reset(App.this.getApplicationContext());//手动开始下载,此时需要先判定网络是否符合要求TbsDownloader.startDownload(App.this.getApplicationContext());}}});
但是我记得下载完有一个重启的提示框,有重启操作,于是我就在安装完成的时候走一下重置步骤
QbSdk.setTbsListener(new TbsListener() {@Overridepublic void onDownloadFinish(int i) {//tbs内核下载完成回调//但是只有i等于100才算完成,否则失败//此时大概率可能由于网络问题//如果失败可增加网络监听器Tip.toast("X5下载完成");}@Overridepublic void onInstallFinish(int i) {//内核安装完成回调,通常到这里也算安装完成,但是在//极个别情况也会出现加载失败,比如笔者在公司内网下偶现,可以忽略Tip.toast("X5安装完成");if (i == 100) {QbSdk.reset(App.this.getApplicationContext());}}@Overridepublic void onDownloadProgress(int i) {Tip.toast("X5下载进度" + i);//下载进度监听Log.e("setTbsListener", " setTbsListener 进度" + i);}});QbSdk.setTbsListener(new TbsListener() {@Overridepublic void onDownloadFinish(int i) {//tbs内核下载完成回调//但是只有i等于100才算完成,否则失败//此时大概率可能由于网络问题//如果失败可增加网络监听器Tip.toast("X5下载完成");}@Overridepublic void onInstallFinish(int i) {//内核安装完成回调,通常到这里也算安装完成,但是在//极个别情况也会出现加载失败,比如笔者在公司内网下偶现,可以忽略Tip.toast("X5安装完成");if (i == 100) {QbSdk.reset(App.this.getApplicationContext());}}@Overridepublic void onDownloadProgress(int i) {Tip.toast("X5下载进度" + i);//下载进度监听Log.e("setTbsListener", " setTbsListener 进度" + i);}});
4).wifi情况下是OK的,但是移动数据流量会没办法加载成功
解决方案:在下面集成步骤的 1.4 SDK初始化 里的(可选)里面,添加下这行代码就可以了 QbSdk.setDownloadWithOutWifi(true); 我有去管理应用后台去查看,加载成功X5内核大小大概130m左右,跟官网的(40-50m)还是有点偏差的。不懂是文档没更新,还是解压后的大小。
下面是关于接入SDK的步骤流程,你可以仔细检查下是否一致。如果集成步骤没漏掉的话,基本上是OK的
1.1 SDK接入
方式一:jar包方式集成(推荐)
您可将官网下载的jar包复制到您的App的libs目录,并且通过Add As Library的方式集成TBS SDK。
前往官网下载SDK
方式二:自动集成
使用 mavenCentral 仓库
在项目级别(通常是根目录下)的 build.gradle
中添加:
repositories {google()// 增加这行mavenCentral()
}
在应用级别(通常是 app 模块下)的 build.gradle
中添加依赖:
dependencies {...// 增加这行api 'com.tencent.tbs:tbssdk:44216'
}
1.2 权限配置
为了保障内核的动态下发和正常使用,您需要在您的AndroidManifest.xml
增加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1.3 混淆配置
为了保障X5功能的正常使用,您需要在您的proguard-rules.pro
文件中添加如下配置:
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**-keep class com.tencent.smtt.** {*;
}-keep class com.tencent.tbs.** {*;
}
1.4 SDK初始化
初始化SDK环境,在App启动后尽可能早地调用初始化接口,进行内核预加载:
QbSdk.initX5Environment(appContext, new new PreInitCallback() {@Overridepublic void onCoreInitFinished() {// 内核初始化完成,可能为系统内核,也可能为系统内核}/*** 预初始化结束* 由于X5内核体积较大,需要依赖网络动态下发,所以当内核不存在的时候,默认会回调false,此时将会使用系统内核代替* @param isX5 是否使用X5内核*/@Overridepublic void onViewInitFinished(boolean isX5) {}
});
(可选)为了提高内核占比,在初始化前可配置允许移动网络下载内核(大小 40-50 MB)。默认移动网络不下载
QbSdk.setDownloadWithOutWifi(true);
1.5首次初始化冷启动优化
TBS内核首次使用和加载时,ART虚拟机会将Dex文件转为Oat,该过程由系统底层触发且耗时较长,很容易引起anr问题,解决方法是使用TBS的 ”dex2oat优化方案“。
(1). 设置开启优化方案
// 在调用TBS初始化、创建WebView之前进行如下配置
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);
(2). 增加Service声明
在AndroidManifest.xml中增加内核首次加载时优化Service声明。
该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务,任务完成后自动结束。
<service
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
android:label="dexopt"
android:process=":dexopt" >
</service>
最后呢。分享下我之前有找过的帖子,主要是让大家少走一些弯路。祝君好运。以下是我搜索资料时查阅的链接,也分享一下吧
腾讯浏览服务
Android集成三方腾讯浏览器X5内核_小华2013的博客-CSDN博客_android 腾讯x5
android 腾讯X5 首次安装App 无效问题 (webview报错TypeError)_许佳佳233的博客-CSDN博客_x5webview初始化失败
安卓使用腾讯tbs查看pdf/word文件(解决x5内核下载问题)_只会helloworld的博客-CSDN博客_x5内核下载
Android集成腾讯TBS_X5内核的一些解决方法相关推荐
- Android集成腾讯X5浏览器内核库
Android集成腾讯X5浏览器内核库 一.相关配置 1. 相关地址 2.引入SDK 3. AndroidManifest配置 二.Application中初始化内核 三.代码实现 1. 自定义带Pr ...
- Android 用腾讯X5内核加载 word ppt 先下载在加载。
Android 用腾讯X5内核加载 word ppt 先下载在加载. 第一步 下载Sdk 导入项目 第二步 下载 pdf word到本地 1. 调用下载 DownloaderTask task ...
- 一张壁纸使 Android 手机集体变砖,目前尚无解决方法
近日,一名网友在 Twitter 上传了一张壁纸并表示该壁纸会使他的三星手机崩溃.此前已经有日历 Bug 导致三星手机集体崩溃的事情发生,而这一次三星手机再次中招.只因为使用了一张风景壁纸就能导致手机 ...
- Android 源码编译及常见错误及解决方法
Android 源码编译及常见错误及解决方法 参考文章: (1)Android 源码编译及常见错误及解决方法 (2)https://www.cnblogs.com/kyyblabla/p/360393 ...
- android webview file,Android WebView 不支持 H5 input type=file 解决方法
最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中.发现点击H5中 input type="file" 标签 不能打开android资源管理器 ...
- Android NDK: WARNING: Ignoring unknown import directory:错误解决方法
Android NDK: WARNING: Ignoring unknown import directory:错误解决方法 添加NDK模块路径(参考,具体视情况): NDK_MODULE_PATH ...
- Android 8.0 的部分坑及对应解决方法
Android 8.0 的部分坑及对应解决方法 参考文章: (1)Android 8.0 的部分坑及对应解决方法 (2)https://www.cnblogs.com/nesger/p/9483582 ...
- Android实际开发中的bug总结与解决方法(一)
Android实际开发中的bug总结与解决方法(一) 参考文章: (1)Android实际开发中的bug总结与解决方法(一) (2)https://www.cnblogs.com/ywq-come/p ...
- Android通知栏Notification弹出横幅显示的解决方法
Android通知栏Notification弹出横幅显示的解决方法 参考文章: (1)Android通知栏Notification弹出横幅显示的解决方法 (2)https://www.cnblogs. ...
- android自动化测试--appium运行的坑问题及解决方法
android自动化测试--appium运行的坑问题及解决方法 参考文章: (1)android自动化测试--appium运行的坑问题及解决方法 (2)https://www.cnblogs.com/ ...
最新文章
- SSL:Ubuntu证书配置
- ARM中Steppingstone启动
- LeetCode 2022春季赛 2. 烹饪料理(状态枚举)
- hbase 协处理器 部署_hbase协处理器概念及知识点总结
- np.random.uniform,random,choice,newaxis
- android 程序员 计算器,程序员计算器(进制转换)
- 电商后台管理系统——权限管理模块
- c语言__100以内的奇数
- 原生js获取浏览器语言配置,设置文本多语言(小demo)
- uniapp—— 微信小程序ios上音频播放没有声音
- word里面的ctrl+z快捷键无效|ctrl+z 无效 最新解决方法
- 面试官最爱提的问题TOP10来自:北京人才市场报
- 爬虫 - WebScraper
- 水星150uh免驱版怎么安装_水星无线网卡MW150UH(免驱版)win10下的安装技巧
- textRNN textCNN(及代码实现)
- Scroll View到达底部加载新页
- (PPT抠图)设置透明色/删除背景
- 华为OD机试真题 C++ 实现【Linux发行版的数量】【2022.11 Q4 新题】
- 浅谈白化(Whitening) 、PCA白化、ZCA白化
- “从沙子到芯片”集成电路技术介绍报告会