崩溃日志抓取
感谢 “liuhe688” 大神的无私分享
这里是博客地址:http://blog.csdn.net/liuhe688/article/details/6584143#
在Android里如果运行时出现异常,而开发者又没有手动去catch的话,程序就会崩溃;
在IDE上进行调试的时候,错误信息会第一时间显示在logcat里,可以很方便的查看崩溃信息,找出错误;
但是如果程序在非调试阶段崩溃的话,logcat就没法为我们显示崩溃日志了。
所以当程序出现未捕获的异常导致崩溃时,我们可以将崩溃日志写到sd卡中,方便排查。
原文大家可以看 “liuhe688” 大神的博客,http://blog.csdn.net/liuhe688/article/details/6584143# 讲解的很清楚;
这里简单讲解一下步骤:
1.自定义类实现UncaughtExceptionHandler接口
2.重写uncaughtException方法
3.在初始化时使用自定义的CrashCatchHandler替换掉系统默认的UncaughtException处理器
4.在uncaughtException方法中获得错误信息,并将它存储到sd卡中
5.自定义Application继承Application,在onCreate方法中初始化自定义的CrashCatchHandler
6.更改AndroidManifest中Application的name字段为自定义的Application
注:这里其实不是必须重写Application,在任何时候我们都可以设置默认的UncaughtException处理器;但是为了能够将整个应用程序的崩溃日志都截取下来,最好是在Application中就更改好。
自己改造过的demo在github上的地址:https://github.com/BadWaka/CrashCatchDemo
预览
提示信息:
sd卡中的crash文件:
使用NotePad++打开.log文件:
下面直接贴出代码:
权限:
<!--读写sd卡权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
CrashCatchHandler自定义UncaughtException处理器
package com.waka.workspace.crashcatchdemo;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageInfo;
import