Home

Awesome

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("irain_log@163.com");
        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);
    }