Android程序崩溃异常处理之自动发送邮件

        由于自己最近在跟一个项目,怎么说呢,项目功能真的是太多了,有时测试的MM忙不过来,有些隐形的bug没发现出来,但是我认为整体稳定性不够好,有时会Crash掉,这也给那些出去演示的市场部伙伴带来了不少的尴尬,虽然说现在属于测试阶段,但毕竟是上线的项目,用户体验不好,有时直接可能会杀死一个产品,而市场部的伙伴在演示的时候也不知道程序崩溃crash具体的操作流程,因为挂的那么突然 = = !,所以每次演示回来都会提出一些UI和程序挂掉的BUG,于是经常会出现如下的对话场景,然而作为程序猿傲娇的本能,“怎么可能?你能给我重现吗?......”,”并不能,但是balabala.....“,好吧,有问题总得改吧,但是他们也只能说出大概挂掉的地方,于是,你就得跟这个bug,看的你是一脸懵逼,根本不知道挂在哪里,好伐???!!!要是你能告诉我挂在那一行,是什么原因,我就至少可以有针对性的改啊。  ~  ~  

        好了,说了这么多,我相信应该有人和我同样的感觉吧,要是能记录下挂掉的行数和原因那该多好啊,于是我搜索了一下,还真有这样的,满足我的需求。它可以自动捕获程序异常,并记录存储在本地,最主要的是它可以自动上传到邮箱和发送到服务器,而且原作者对此方法进行了封装,只要进行简单的配置就可以使用了。

        这里我就直接给出作者的文章地址(文章地址在文末)吧,不过,我这里做一些小的补充,因为就算有了别人的框架,我按照他的说明还是没完全成功,并不能发送到邮箱,只能保存异常信息到本地sd卡上,作为并没接触过邮件发送的我,也不知道原因出在哪,我看到好多人在下载源代码的链接下面留言说不能用,以为真的不能用,但是我不甘心,于是我又搜索了一些资料,终于看出了一些端倪,原来是我的邮箱的smtp服务功能没开启,邮箱为了安全起见,默认是关闭的,也就是不能自动发送邮件。

       好的,下面我给出此框架的使用步骤吧。

       使用本框架前,你需要以下jar包  android-crash-1.0.jar  activation.jar  additionnal.jar  mail.jar 后面的3个是可选的,如果你用邮件的方式的话,就需要它们,如果采用服务器的方式,就不用了。这几个jar包,点击此处下载。

首先先说使用步骤吧:

1,添加jar包

①,如果你是Eclipse用户,你想用到邮件的发送来处理异常信息,那你得需要将上面的4个jar包添加到你的项目中,具体步骤不会的可百度。

②,如果你是Android studio用户,你需要在build.gradle(Project:xxx)下的repository中添加如下代码段

repository {
   jcenter() // or mavenCentral()
}

Android程序崩溃异常处理之自动发送邮件_第1张图片

在build.gradle(Module:xxx) 中的dependencies添加如下依赖

compile 'com.githang:android-crash:1.0'

后面的3个是可选的,如果用邮件的方式发送的话,需要添加jar包,和添加相应的依赖

Android程序崩溃异常处理之自动发送邮件_第2张图片

其实上述的添加依赖是可以自动完成的,当你把jar包导入后,然后邮件你的jar包,会出现add to library,你添加后,会在依赖中发现已经帮你自动添加了。

2,属性配置

自定义一个类,让其继承于Application,并在AndroidManifest.xml中的application节点中使用name属性,将类名添加进去,这样当程序一启动就会先执行继承自application类里面的配置,最后要别忘了添加权限,一个是网络权限,一个是往sd卡写的权限

 public class MyApplication extends Application{	
       @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");//这里使用的是163发送邮件的服务,所以主机名是163的,有需要修改的,也可以更改对应的主机名
	        reporter.setPort("465");//端口号,可选25端口号,具体的看是否使用ssl安全协议
	        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(getApplicationContext()).
	                        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://xxx.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);
	    }
}

特别要注意的是,对于自动发送邮件的,一定要邮箱开启SMTP服务功能,否则程序会报一个自动验证失败的异常,发送不了邮件。

具体怎么设置SMTP服务,请点击下面的链接 http://jingyan.baidu.com/article/0aa223755d15dc88cd0d6473.html  

本框架的作者原文链接如下 http://blog.csdn.net/maosidiaoxian/article/details/27178439  具体的原理可参见此文
 

如果对以上内容有疑惑的,欢迎留言!!

你可能感兴趣的:(异常处理,android,bug)