前言
小巫最近由于工作原因面临技术转型,从一个App开发者转变为SDK开发者,这两者的区别是非常明显的,从用户角度来讲,app开发主要面向普通的用户需求,然而SDK开发面向的却是开发人员;从技术角度来讲,app开发更多的只是UI层面、基于数据流的技术实现,而SDK开发可能就要涉及更多复杂的需求、更多底层相关的技术实现。前面我在公众号分享了一篇文章:一个好的SDK或好的开放平台应该为开发者提供什么?,大家有兴趣可以看看。本系列博文主要是想跟大家分享一下在Android平台中如何进行Crash分析并解决问题并告诉大家如何通过bugly进行崩溃捕获快速定位问题。
什么是Crash?
想必这个只要从事过编程工作的同学一定知道是什么?这里我们进行一些概念上的普及:
Crash就是由于代码异常而导致App非正常退出现象,也就是我们常说的『崩溃』
Android中有哪些类型Crash
通常情况下会有以下两种类型Crash:
Java Crash
Native Crash
本篇先探讨Java Crash,Native Crash我们会在下一篇重点讨论。
Java Crash在Android上的特点
这类错误一般是由Java层代码触发的
一般情况下程序出错时会弹出提示框,JVM虚拟机退出
一般的Crash工具都能够捕获,系统也提供了API
举个栗子
制造一个空指针异常
我们可以看到,button是没有被实例化的,我们调用它的方法就会让程序崩溃,如下图所示:
崩溃提醒
通过Crash堆栈信息定位问题
上面就是一个很简单的Crash啦,相信很多同学在开发过程中一定遇到过这种情况,万恶的空指针啊,啊,啊。我们来看看logcat给我们输出的堆栈信息:
定位问题
通过logcat查看Error级别日志,就可以完整看到打印出来的堆栈信息,我们找到『Caused by』信息:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.devilwwj.androidcrashdemo.MainActivity.onCreate(MainAc