一、问题背景
咱们公司开发了一款 App,一部小局部用户反映在开 APP 受权告诉权限之后会呈现闪退的状况,然而咱们通过几台测试机的测试,都无奈复现这个问题,比拟辣手。
二、遇到的挑战
因为咱们是守业型的公司,没有太多的估算购买很多品种的测试机,安卓机每个品牌只有一个型号的测试机,而且零碎版本也没方法笼罩齐全,苹果机也是一样的状况。呈现闪退的状况,光靠用户的形容是比拟难定位到谬误的中央,用户内存占用过多?磁盘空间有余?抑或是逻辑上的问题导致的闪退?而且,咱们应用的是混合开发,框架应用的是 ionic,大部分页面和逻辑都是混合开发。因为 App 波及到蓝牙连贯相干的 SDK 和 DFU 固件降级,而 ionic 在这一块没有封装相应的接口,所以这部分的内容咱们还是通过在原生下面进行开发,再应用 ionic 去调用原生的内容。这更加减少了 debug 的难度。
三、解决问题的步骤
为了找到导致 crash 的中央,咱们先排除掉机器内存和磁盘空间有余导致的问题,咱们通过上传用户手机的内存总大小、残余内存的大小、磁盘总空间和磁盘残余空间,排除掉了这个因素。之后咱们就思考是不是因为代码逻辑上的一些问题导致的,于是咱们尝试应用友盟的 U -APM 产品,它外面有一个很好的解体剖析工具,能够看到 crash 的一些信息,包含谬误的类型、具体哪一行导致了报错、呈现的频率和机器相干的参数,这对咱们的 debug 有很大的帮忙,于是咱们尝试装置友盟的 SDK,设置了邮件和钉钉的谬误揭示,并公布了新版本 APP。两天后,这部分用户再次关上 App 之后,也呈现了受权权限之后闪退的状况,与此同时,咱们也收到了来自友盟的谬误揭示邮件和钉钉揭示。点击进去之后发现 U -APM 帮忙定位了谬误的中央,如下图,在 MainActivity.java 的第 93 行,呈现了 ArrayIndexOutOfBoundsException,也就是数组下标超过了数组长度 -1,而且具体的 crash 工夫和机器参数也同时总结了进去,帮咱们总结了很有用的信息,咱们发现这个景象只有在光荣系列的手机里才会呈现,于是咱们增强了光荣系列手机的测试,在一次手动在零碎中敞开权限之后关上 app 的用例中重现了这个问题,也找到了基本的起因,因为当用户手动敞开某些权限的时候,回调返回的是一个空数组,而咱们去取下标为 1 的值的时候就会导致报错了。
修复之后咱们持续应用友盟去察看这个问题有没有解决,自从修复了这个问题并公布了新版本之后,就不会再报这个错了。
四、问题总结
有些时候遇到 crash 的状况,而且无奈复现,作为开发者的确挺头疼的,应用友盟的 U -APM 产品,能够帮忙咱们更疾速地定位问题,总结相应的状况,帮忙咱们更被动地去发现问题、解决问题,进而进步用户的体验。
作者:梁立坤
平时酷爱专研技术,长于利用各种 Saas 平台的工具帮忙团队晋升开发、部署、运维、排错的效率。