PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED
android-crash
android crash 是我写的一个Android程序崩溃信息处理框架。通过它,可以在程序崩溃时收集崩溃信息并用你指定的方式发送出来。
在本框架中,我实现了邮件及HTTP POST请求的发送方式。如果要采用其他方式,可以继承AbstractCrashReportHandler类并实现其抽象方法。
使用本框架的方法只需要两个步骤。 1、添加依赖: 在repository中添加jcenter。
repository {
jcenter() // or mavenCentral()
}
在dependencies中添加如下依赖。
compile 'com.githang:android-crash:1.0'
2、写一个类,继承自Application,并在AndroidManifest.xml中指定。然后在onCreate方法中添加如下代码:
使用E-mail方式,需要添加activation.jar, additionnal.jar, mail.jar 这三个jar包,可以从本项目的libs文件夹中获取。使用HTTP方式则不需要其他依赖库。
@Override
public void onCreate() {
super.onCreate();
initHttpReporter();
}
/**
* 使用EMAIL发送日志
*/
private void initEmailReporter() {
CrashEmailReporter reporter = new CrashEmailReporter(this);
reporter.setReceiver("你的接收邮箱");
reporter.setSender("[email protected]");
reporter.setSendPassword("xxxxxxxx");
reporter.setSMTPHost("smtp.163.com");
reporter.setPort("465");
AndroidCrash.getInstance().setCrashReporter(reporter).init(this);
}
/**
* 使用HTTP发送日志
*/
private void initHttpReporter() {
CrashHttpReporter reporter = new CrashHttpReporter(this) {
/**
* 重写此方法,可以弹出自定义的崩溃提示对话框,而不使用系统的崩溃处理。
* @param thread
* @param ex
*/
@Override
public void closeApp(Thread thread, Throwable ex) {
final Activity activity = AppManager.currentActivity();
Toast.makeText(activity, "发生异常,正在退出", Toast.LENGTH_SHORT).show();
// 自定义弹出对话框
new AlertDialog.Builder(activity).
setMessage("程序发生异常,现在退出").
setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AppManager.AppExit(activity);
}
}).create().show();
Log.d("MyApplication", "thead:" + Thread.currentThread().getName());
}
};
reporter.setUrl("http://crashreport.jd-app.com/your_receiver").setFileParam("fileName")
.setToParam("to").setTo("你的接收邮箱")
.setTitleParam("subject").setBodyParam("message");
reporter.setCallback(new CrashHttpReporter.HttpReportCallback() {
@Override
public boolean isSuccess(int i, String s) {
return s.endsWith("ok");
}
});
AndroidCrash.getInstance().setCrashReporter(reporter).init(this);
}