Crosswalk加载React页面 追踪了两天的Bug

从发现问题,定位问题,到解决问题,耗时两天,终于填了这个坑.....

刚开始是crosswalk是加载H5页面的,经过了七八个版本的迭代,已经相对成熟稳定了。引入crosswalk的过程其实还是很艰难的,从在部分机型闪退,到OPPO部分机型没声音,也是一个坑一个坑的踩过来的。当然crosswalk的Bug清单上也是很多用户提的很多bug,大部分还是给予解决的。Crosswalk的优点还是很明显的,流畅,包括很多低配的手机上音频和页面都很流畅。至于缺点,那就是增大apk大概20~30M的体积,不过还可以接受,毕竟性能优先级更高嘛。下面转载一位大牛总结的crosswalk引入流程,写的非常好。地址:http://www.jianshu.com/p/5e9e3e9ad01c

言归正传,说Bug。由于现在前端页面改成用React来写,导致现在用crosswalk来加载新链接必闪退,加载老链接没问题。下面是bug日志:

01-15 15:45:38.455 20852-20948/cn.firstleap.live E/v8: #
                                                       # Fatal error in , line 0
                                                       #
01-15 15:45:38.455 20852-20948/cn.firstleap.live E/v8: Failed to create ICU number format, are ICU data files missing?
01-15 15:45:38.455 20852-20948/cn.firstleap.live E/v8: #
从很多个日志中终于找到一条有价值的东西,就是上面这个。刚开始看到这个bug是无从下手的(ICU?重症监护室吗?)通过Google一下还真找到同样问题:

Description

Impacted Cases
==============
In my Android app using the Crosswalk embedded API (to replace stock WebView), the app is crashing upon loading a website into an XWalkView. xwalk_core_library version is 18.48.477.13

This is happening on a stock Nexus 6 running Android 6.0.1.

Reproduce Test Steps
====================
1. Launch application and load website on XWalkView.

Expected Outcome
================
1. Website loads and appears in XWalkView.

Actual Outcome
==============
The application crashes and the following appears in the logs:

E/v8: #
      # Fatal error in , line 0
      # 
E/v8: Failed to create ICU number format, are ICU data files missing?
E/v8: #
W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
W/google-breakpad: Chrome build fingerprint:
W/google-breakpad: 1.0.0
W/google-breakpad: 1
W/google-breakpad: 7d26c012-4f20-450a-b207-c04dc7980276
W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
A/libc: Fatal signal 4 (SIGILL), code 1, fault addr 0x9b83fae6 in tid 12266 (Chrome_InProcRe)

并且下面给予了一个解决思路,删掉项目里所有webkit(Android4.4以前webview内核是webkit):
kurtdlittle@gmail.comKurt Little (Inactive)  added a comment -   15/Jun/16 12:15 PM

So, I was able to clear up this issue by removing all usages of classes/methods from the android.webkit package from my app. I accidentally had some residual code left in the app that was not cleaned up when I migrated from using the Android WebView to using Crosswalk.

Specifically, when I removed CookieManager.getInstance(), things started working.


顺着这条路子我们写了个demo,确实如果使用crosswalk前一旦用到了webkit必然是报同样bug的;所以我们的路子一是移除项目里的webview,但后来放弃了,大家都知道webview应用是非常广泛的,我们项目里的直播、友盟、还有一些轻量级加载web页面的模块都是用的webview,如果都换成crosswalk代价太大。(大家可能会问我们为什么这个链接不用webview加载,因为前端链接里包含phaser游戏引擎还有很多图片音频资源;用原生webview来加载,在低性能设备上会出现严重的卡顿,包含音频和页面)

思路二:用腾讯X5内核浏览器加载新链接。尽管我们这边已经测试过没有大问题但是还是由于用户多,时间紧,不能轻易更换一个大的架子而摒弃了。

思路三:前端项目重构,用原来H5来写。因为页面较多,耗时耗力,重写不可能。

思路四:又回到第一个思路来,只能根据bug来重新定位。最终我们怀疑是crosswalk和新版链接存在某种冲突导致的(到底是什么冲突,还无从知晓);后来经过与前端同事一起联调,一个一个注释掉web页面的三方库,终于确定是 core-js/shim这个库导致的,这个库是用来兼容浏览器的,因为我们只用crosswalk,所以不存在什么兼容性。经过打包测试,追踪两天的bug的到解决。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值