Crashlytics Android 异常报告统计管理

http://www.infoq.com/cn/articles/crashlytics-crash-statistics-tools

简介

Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具。Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Path, 团购应用GroupOn等移动应用。

2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品。被收购之后,由于没有了创业公司的不稳定因素,我们更有理由使用它来分析应用崩溃信息。

使用Crashlytics的好处有:

1、Crashlytics不会漏掉任何应用崩溃信息。拿我的应用举例来说,在iTunes Connect的后台查看不到任何崩溃信息。但是用户确实会通过微博或者客服电话反馈应用崩溃的情况。而这些在Crashlytics中都可以统计到。如下截图分别显示了我的某应用在苹果iTunes Connect后台和Crashlytics中的差别:

 

2、Crashlytics可以象Bug管理工具那样,管理这些崩溃日志。例如:Crashlytics会根据每种类型的Crash的出现频率以及影响的用户量来自动设置优先级。对于每种类型的Crash,Crashlytics除了会像一般的工具提供Call Stack外,还会显示更多相关的有助于诊断的信息例如设备是否越狱,当时的内存量,当时的iOS版本等。对于修复掉的Crash日志,可以在Crashlytics的后台将其关掉。下图所示的是一个我的早期应用的崩溃记录,在我修复后,我将其更新为已修复状态。

3、Crashlytics可以每天和每周将崩溃信息汇总发到你的邮箱,所有信息一目了然。

下面我就给大家介绍如何使用Crashlytics。

使用介绍

申请帐号

Crashlytics的服务是免费提供的,但是并不能直接注册使用,需要先申请,打开Crashlytic的官网 ,输入自己的邮箱申请使用。如下图所示:

提交完邮箱之后,你的申请会放在Crashlytics的申请队列中,网页跳转到如下界面。在这个界面的右侧,你可以提供更多有效信息来让Crashlytics优先处理你的申请,建议大家都填上更多自己的信息。

如果顺利,通常1-2天左右,你就会收到Crashlytics发来的申请通过邮件,如下图所示,通过邮件链接跳转到注册界面,填写密码即可完成注册。

设置工程

在使用Crashlytics前需要对原有的XCode工程进行配置,在这一点上,Crashlytics做得比其它任何我见过的SDK提供商都体贴。因为Crashlytics专门做了一个Mac端的App来帮助你进行配置,所以,在配置前你先需要去这里下载该应用。

应用下载后,运行该应用并登录帐号。然后选择应用中的”New App”按钮,然后选择自己要增加Crashlytics的工程,然后Crashlytics的应用会提示你为工程增加一个Run Script,如果你不知道如何添加,这里有一个帮助的文档。添加好之后的工程截图如下所示

接着,Crashlytics的本地应用会提示你将Crashlytics相关的framework拖到工程中。如下所示:

按照提示做完之后,就到了最后一步了,在AppDelegatedidFinishLaunchingWithOptions方法中加入如下代码:

1
2
3
4
5
6
#import <Crashlytics/Crashlytics.h>

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   [Crashlytics startWithAPIKey:@"your identify code"];
}

之后,运行一下程序,Crashlytics就会检测到你设置成功。如果你感兴趣,可以自己手工触发一个崩溃记录,看Crashlytics能否帮你收集到。使用如下代码即可

1
[[Crashlytics sharedInstance] crash];

如果你想测试一个Exception导致的崩溃,可以使用如下代码:

1
2
[NSObject doesNotRecognizeSelector];
[arrayWithOnlyTwoElements objectAtIndex:3];

应用对外发布后,就可以在Crashlytics后台查看和修改相关的记录。另外,Crashlytics还支持将数据导入到其它项目管理工具(例如Redmine或Jira)如下所示,配置都非常简单。

实现原理和使用体会

实现原理

在原理上,Crashlytics的通过以下2步完成崩溃日志的上传和分析:

  1. 提供应用SDK,你需要在应用启动时调用其SDK来设置你的应用。SDK会集成到你的应用中,完成Crash信息的收集和上传。
  2. 修改工程的编译配置,加入一段代码,在你每次工程编译完成后,上传该工程对应的dSYM文件。研究过手工分析Crash日志的同学应该知道,只有通过该文件,才能将Crash日志还原成可读的Call Stack信息。

使用体会

为了更加方便开发者设置相应的工程,Crashlytics提供了mac端的应用程序,帮助你检测相关工程是否正确设置并且提供相应的帮助信息。后来我还发现,该程序还会自动帮你升级Crashlytics的SDK文件。虽然这一点很体贴,但是我个人觉得还是不太友好。因为毕竟修改SDK会影响应用编译后的内部逻辑,在没有任何通知的情况下升级,我都无法确定Crashlytics有没有干坏事。不过国外的服务,特别是象Twitter这种相对较大知名度公司提供的服务要有节操得多,所以在这一点上我还是比较放心的。

使用Crashlytics可以让你摆脱管理应用崩溃记录的烦恼。并且帮助你找出应用的一些重大隐藏性Bug。例如我之前写的一个应用就过一个缓存过期的问题,只有当缓存过期时才会触发这个Bug,这样的问题在测试人员那边很难触发,因为他们不可能了解你的应用内部实现细节。通过Crashlytics,使我清楚了解到应用Crash的数量和位置,结合自己的开发经验,就很容易找到问题所在了。

值得一提的是,Crashlytics本身的官方文档也非常健全,如果你在使用中遇到任何问题,也可以上去查看详细的文档。

愿Crashlytics能让大家的应用都更加健壮~

0
时间: 2024-07-31 07:12:42

Crashlytics Android 异常报告统计管理的相关文章

Android内存优化1 了解Android是如何管理App内存

1, Dalvik & ART Android在4.4之前一直使用的Dalvik虚拟机作为App的运行VM的, 4.4中引入了ART作为开发者备选, 5.0起正式将ART作为默认VM了. 我们首先来简单了解下二者: 1.1 Dalvik 如果只是想简单了解, 个人觉得百度百科上这个Dalvik的介绍基本就满足要求了. 如果大家想深入, 可以看下老罗的Android之旅中Dalvik的相关博文, 从代码层面上分析了Dalvik的启动, 运行机制等. 值得一看. 需要说明的是, Dalvik采用的是

Android的软件包管理服务PackageManagerService源码分析

Android系统下的apk程序都是通过名为PackageManagerService的包管理服务来管理的.PacketManagerService是安卓系统的一个重要服务,由SystemServer启动,主要实现apk程序包的解析,安装,更新,移动,卸载等服务.不管是系统apk(/system/app),还是我们手工安装上去的,系统所有的apk都是由其管理的. 以android 4.0.4的源码为例,android4.0.4/frameworks/base/services/java/com/

android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } } 所以消息的处理分层三种,就是 1.传入一

Android Dalvikvm 内存管理理解

网上很多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,究竟是如何实现的. 这几天猛看了 Dalvikvm 的源代码,说一下我的理解: 在大层面上讲跟理论一样,jvm 把内存分成了一些区, 关于各区的说明参见. http://blog.csdn.net/lengyuhong/article/details/5953544 对于hello world 这样简单程序,发现dalvikvm也就用了一个heap, 就是Eden区了. dalvikvm 使用 mmap 创建共享内存(堆是多

Android系统下载管理DownloadManager功能介绍及使用示例

http://www.trinea.cn/android/android-downloadmanager/ 本文主要结合源码介绍Android系统下载管理DownloadManager的强大功能及使用.这是许久来准备写的一系列博客,这篇主要介绍DownloadManager的功能和示例,后面还有两篇会介绍下载管理的底层设计(DownloadProvider.DownloadManager.DownloadManagerUI).下载管理如何进行功能增强和bug修改. 示例APK可从这些地址下载:G

Android流量统计TrafficStats类

对于Android流量统计来说在2.2版中新加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析. android.net.TrafficStats类中,提供了多种静态方法,可以直接调用获取,返回类型均为 long型,如果返回等于-1代表 UNSUPPORTED 当前设备不支持统计. static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi stati

Android 内存溢出管理与测试

今天发现正在做的项目,时不时的会报错:dalvikvm heap out of memory on a 7458832-byte allocation (堆分配的内存溢出) 为什么会内存溢出呢?我以前从未遇见这种情况.后来在网上查了查资料,还是挺多的. 怎么说呢?因为Android开发基本上是以java语言为基础,那么程序是在java虚拟机上运行的.而虚拟机不允许单个程序中的Bitmap占用超过8M的内存,从报错的日志可以看出:7458832-byte大约就是7M多的样子,基本吻合上述数据.在我

android快捷方式shortcut 管理

如下58同城快捷方式的效果: 下面是添加桌面快捷方式: /** * 启动某个activity是需要在manifest里面定义 <intent-filter> <action * android:name="android.intent.action.MAIN" /> </intent-filter> */ private void addShortCut() { // 安装的Intent Intent shortcut = new Intent(&q

Android Stduio统计项目的代码行数

android studio统计项目的代码行数的步骤如下: 1)按住Ctrl+Shift+A,在弹出的框输入‘find’,然后选择Find in Path.(或者使用快捷键Ctrl+Shift+F) 2)在弹出Find in Path的框中的Text to find输入\n,接着勾选Regular expression(正则表达式),Context选择anywhere, Scope根据你想要统计的范围进行选择,File mask选择*.java.(在这里统计项目的Java的代码行数) 3)下图的