当前位置: 首页 > 工具软件 > Crosswalk > 使用案例 >

Android 集成Crosswalk替换成X5WebView

黄景胜
2023-12-01

替换的Crosswalk原因想必用过的都知道

  • Crosswalk官方已经在2017年不维护了
  • Crosswalk lib包太大,导致apk体积变大

遇到的问题总结:

  1. 在Application中初始化的时候直接闪退

错误日志: Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Did not yet override the UI thread
at org.xwalk.core.ReflectConstructor.newInstance(ReflectConstructor.java:54)
at org.xwalk.core.XWalkView.reflectionInit(XWalkView.java:2082)
at org.xwalk.core.XWalkView.(XWalkView.java:261)

解决方法:参考官方给出的方法:

由于crosswalk及quic与x5存在相同的包名,会导致内核默认加载app classLoader中的类,导致内核加载失败或者出现crash,如果您需要解决该问题,可在初始化内核之前添加如下代码:

 HashMap map = new HashMap();
 map.put(TbsCoreSettings.TBS_SETTINGS_USE_PRIVATE_CLASSLOADER, true);
 QbSdk.initTbsSettings(map);// 使用独立ClassLoader进行加载
  1. X5WebView加载出来的网页,滑动的时候会有个滚动条小方块,使用如下代码可以去掉。
  IX5WebViewExtension ix5 = webview.getX5WebViewExtension();
       if (null != ix5) {
           ix5.setScrollBarFadingEnabled(false);
       }
  1. Gradle方式集成方式

    api ‘com.tencent.tbs.tbssdk:sdk:43939’

我这一直报如下错误,提示依赖包冲突,导致不兼容。

AAPT: error: resource android:attr/dialogCornerRadius not found.

采用jar包方式集成我这没问题。

  1. 实现自定义长按菜单,并且屏蔽X5内核自带的长按菜单。
    参考我另一篇博客
  2. X5初始化失败,造成项目崩溃
    1. 手机没装腾讯的app,X5首页初始化会下载内核,如果遇到没网的情况,在华为手机上会导致直接闪退,其他手机会自动加载系统内核。并且就算后期网络好了也不会继续下载内核(应该是个bug)
    2. 手机中装有腾讯的任一app,首次进入X5内核只需要共享内核,无需下载
    3. 造成崩溃的原因是初始化失败,获取参数的时候报空指针了,我这是这两个方法报空了X5.getX5WebViewExtension()和X5.getSettingsExtension,具体看你的报错信息。

解决办法:

  1. 非空判断,如果报空的地方不影响你项目执行逻辑可以采用这方法。
  2. 用手机访问debugtbs.qq.com中手动安装线上版本,提示安装成功,重启项目即可。
  3. 将内核直接打包到app中,会增大30多兆的size。

  1. 清理X5内核缓存方法
 QbSdk.clearAllWebViewCache(this,true);
 类似资料: