Android Bug收集解决方案分析

来源:互联网 发布:手机淘宝评价删除不了 编辑:程序博客网 时间:2024/05/21 11:29

Android Bug收集解决方案分析


一.概述

本文主要介绍Android平台下bug类型和产生原因、崩溃捕获和收集解决方案、以及bugly的使用方法。Android平台下bug类型主要有Crash、ANR、卡顿、服务器异常等。要实现Android Bug捕获和收集的困难主要有这么几个:1、如何捕获崩溃;2、如何获取堆栈信息;3、将错误日志上传到指定服务器。采用腾讯bugly的错误日志功能能捕获应用Java Crash、C/C++ Native Crash 、 ANR和卡顿,能够满足日常需求,且不需要额外准备接收服务器。使用bugly可以收集到已发布应用的异常,以便测试和开发人员发现和修改bug,对于提高软件质量有着极大的帮助。

二.Android 平台bug类型及产生原因分析

Android 平台bug类型主要有:Crash、ANR、卡顿、服务器异常等。

1,常见的Android Crash有两类:一类是Java Exception异常,一类是Native Signal异常。

2,ANR全称是Application Not Responding,是指应用程序未响应。

Android系统对于一些事件需要在一定的时间内完成,如果超过预定时间未响应或者响应时间过长,会造成ANR。一般这时系统会弹出一个ANR对话框,用户可自行选择继续等待或者停止当前程序运行。 
那么哪些场景会造成ANR呢? 
* 1)、Service Timeout:比如前台服务在20秒内未执行完成; 
* 2)、BroadcastQueue Timeout:比如前台广播在在10秒内未执行完成; 
* 3)、ContentProvider Timeout:内容提供者,在punlish过超时10秒; 
* 4)、InputDispatching Timeout:输入事件分发超时5秒,如按键或者触摸事件;

3,卡顿:16ms原则。Android系统每隔16ms会发出VSYNC信号重绘界面(Activity)。

为什么是16ms,因为Android设定的刷新频率是60FPS(Frame Per Second),也就是每秒60帧的刷新率,约合16ms刷新一次。 
这就意味着,我们需要在16ms内完成下一次刷新的界面相关运算,以便界面更新。 
哪些情况会导致卡顿? 
* 1)、过于复杂的布局(使用Hierarchy Viewer工具分析,Hierarchy Viewer 不仅可以以图形化树状结构的形式展示出UI层级,还对每个节点给出三个小圆点,以指示该元素Measure,Layout,Draw的耗时及性能); 
* 2)、过度绘制(OverDraw),理想情况下,每屏每帧上,每个像素点应该只被绘制一次,如果有多次绘制,就是OverDraw,过度绘制了。

4,服务器异常:使用Fiddler抓包工具。

Fiddler是位于客户端和服务端的HTTP代理。它能够记录客户端的服务器之间的所有HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的参数,甚至可以修改服务器返回的数据,功能非常强大。

引申——Android适配问题引起的bug

  • 1),屏幕适配:分辨率、尺寸等。
  • 2),机型适配:2015年统计1294家厂商生产出682000款Android手机。
  • 3),Android版本适配:比如说,Android6.0加入运行时权限,7.0加入虚拟文件对相机拍照和选择图片有影响。

三.崩溃捕获原理

系统的默认处理很抱歉,”营销管家”已停止运行。
  • 1),Java崩溃捕获方式 
    首先注册异常处理Thread 
    setDefaultUncaughtExceptionHandler(Tread.UncaughtExceptionHandler); 
    线程一旦崩溃,异常处理器的Thread.UncaughtExceptionHandler.uncaughtException(Thread t,Throwable e)方法被调用;最后在uncaughtException方法中实现Java异常的捕获及上报。
  • 2),Native崩溃捕获方式

Native崩溃捕获方式.png

信号的背后.png

崩溃背后的处理.png

四.移动端常用的bug收集方案

  • 1) 友盟 
    优点:Android和iOS可用,统计功能突出,能捕获应用层Crash; 
    缺点:bug收集不及时。
  • 2) Bugly 
    优点:Android和iOS可用,bug收集及时,能捕获应用Java Crash、C/C++ Native Crash 、 ANR和卡顿并提供相应的bug修复建议,对bug进行了合并统计; 
    缺点:bugly收集的信息较多。
  • 3) Bugtags 
    优点:一套完善的bug管理系统,Android和iOS可用,Bugtags 提供了远程配置功能,可以在 APP 不发版的情况下,在线控制 APP 的行为或者外观。 
    缺点:不能捕获 ANR和卡顿问题。
  • 3) DIY(自己搭建bug收集平台) 
    优点:可以根据自己的业务需求实现,不依赖第三方平台; 
    缺点:需要编写错误收集代码,需要搭建错误日志收集服务器。

五.使用Bugly

看懂问题ISSUE.png 
* 1),看懂bugly 的java 栈

BUGLY JAVA栈.png

  • 2),看懂Bugly的Native栈

Bugly Native栈.png

六.Bugly存在误报和漏报吗?

  • 1)不存在误报。 
    因为异常与否是由系统API直接回调,不存在Bugly误判的空间。
  • 2)存在漏报。 
    没来的及处理,比如说虚拟机崩溃,直接dump了,虚拟机直接sigabrt ,此时调用任何jni ,程序直接退出了。 
    上报是在java层,第二次启动时上报上去,有可能用户卸载了,或者不再打开等。
  • 3)对于try…catch住的异常无法上报,只能通过log记录。

七.关于移动应用Crash统计数据

整体崩溃率.png

崩溃机型.png

Top崩溃.png

八.Android常见bug及解决方案总结

参考:Android常见bug及解决方案总结.doc

九.服务器异常获取

参考:Fiddler手机抓包工具使用详解.doc

十.DIY Android和iOS平台的崩溃捕获和收集器

参考:经典好文:android和iOS平台的崩溃捕获和收集 - wx0123 - 博客园.htm

原创粉丝点击