关于我开发中遇到的问题,主要还是不够细心导致的,官方文档写的也没很清楚,但是还是分享出来一下,让新手可以少走弯路,也防止自己忘记了。主要有下面几个问题:

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声明

  1. 在AndroidManifest.xml中增加内核首次加载时优化Service声明。

  2. 该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内核的一些解决方法相关推荐

  1. Android集成腾讯X5浏览器内核库

    Android集成腾讯X5浏览器内核库 一.相关配置 1. 相关地址 2.引入SDK 3. AndroidManifest配置 二.Application中初始化内核 三.代码实现 1. 自定义带Pr ...

  2. Android 用腾讯X5内核加载 word ppt 先下载在加载。

    Android 用腾讯X5内核加载 word ppt  先下载在加载. 第一步 下载Sdk 导入项目  第二步 下载 pdf word到本地 1. 调用下载  DownloaderTask task ...

  3. 一张壁纸使 Android 手机集体变砖,目前尚无解决方法

    近日,一名网友在 Twitter 上传了一张壁纸并表示该壁纸会使他的三星手机崩溃.此前已经有日历 Bug 导致三星手机集体崩溃的事情发生,而这一次三星手机再次中招.只因为使用了一张风景壁纸就能导致手机 ...

  4. Android 源码编译及常见错误及解决方法

    Android 源码编译及常见错误及解决方法 参考文章: (1)Android 源码编译及常见错误及解决方法 (2)https://www.cnblogs.com/kyyblabla/p/360393 ...

  5. android webview file,Android WebView 不支持 H5 input type=file 解决方法

    最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中.发现点击H5中 input type="file" 标签 不能打开android资源管理器 ...

  6. Android NDK: WARNING: Ignoring unknown import directory:错误解决方法

     Android NDK: WARNING: Ignoring unknown import directory:错误解决方法 添加NDK模块路径(参考,具体视情况): NDK_MODULE_PATH ...

  7. Android 8.0 的部分坑及对应解决方法

    Android 8.0 的部分坑及对应解决方法 参考文章: (1)Android 8.0 的部分坑及对应解决方法 (2)https://www.cnblogs.com/nesger/p/9483582 ...

  8. Android实际开发中的bug总结与解决方法(一)

    Android实际开发中的bug总结与解决方法(一) 参考文章: (1)Android实际开发中的bug总结与解决方法(一) (2)https://www.cnblogs.com/ywq-come/p ...

  9. Android通知栏Notification弹出横幅显示的解决方法

    Android通知栏Notification弹出横幅显示的解决方法 参考文章: (1)Android通知栏Notification弹出横幅显示的解决方法 (2)https://www.cnblogs. ...

  10. android自动化测试--appium运行的坑问题及解决方法

    android自动化测试--appium运行的坑问题及解决方法 参考文章: (1)android自动化测试--appium运行的坑问题及解决方法 (2)https://www.cnblogs.com/ ...

最新文章

  1. matlab中help所有函数功能的英文翻译
  2. 广义线性模型、Logistic、sigmoid、softmax、多分类、与大数据、优缺点
  3. 区块链预言机(4)内在机制
  4. 网站高并发及高并发架构详解
  5. CF1286D-LCC【动态dp,数学期望】
  6. 手动创建两个文本文件text1.txt和text2.txt,按要求创建text3.txt
  7. Java的native方法
  8. Java多线程学习三十六:主内存和工作内存的关系
  9. 架构师Jack专访:全面认识软件测试架构师
  10. python虚拟环境解决不能执行脚本的问题
  11. mysql repalication_MYSQL数据库知识点总结
  12. 对于C语言可移植性的思考
  13. Java爬虫-使用爬虫下载千张美女图片!
  14. Labview与三菱PLC通讯 (2)
  15. 拼多多商品详情页API接口、拼多多APP详情API接口、拼多多商品销量API接口、拼多多商品列表API接口、拼多多详情API接口
  16. 一款三搭_今秋内搭无需多,有“小高领”就够了!时髦百搭,配啥上衣都好看...
  17. 如何使用 JS 实现带字母的导航城市列表,以及城市搜索
  18. 路由跳转后需要两次调用goback才能正常返回
  19. c++学习:多线程;顺序容器;智能指针
  20. 什么是Socks5代理?

热门文章

  1. 【专栏必读】软件工程导论第六版(张海藩)专栏学习笔记目录导航
  2. Redis的安装教程(Windows+Linux)【超详细】
  3. 百度人脸识别使用总结(环境+测试+人脸库管理)
  4. matlab fseek ftell,fseek函数、ftell函数和fflush函数
  5. Picsee 1.3.0 (48) 中文版 (可能是最好的图片管理查看工具)
  6. 如何批量查询ip地址归属地等信息?
  7. 快速查找文件的神器Listary
  8. LwIP协议栈源码详解—TCP定时器
  9. html 跑马灯效果 源代码,跑马灯效果.html
  10. android跑马灯源码,Android跑马灯的简单实现方式