Android程序崩溃异常处理之自动发送邮件
Posted 当富网络
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android程序崩溃异常处理之自动发送邮件相关的知识,希望对你有一定的参考价值。
from : http://blog.csdn.net/android_cmos/article/details/51170916
由于自己最近在跟一个项目,怎么说呢,项目功能真的是太多了,有时测试的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中添加如下代码段
[java] view plain copy print ?- repository
- jcenter() // or mavenCentral()
在build.gradle(Module:xxx) 中的dependencies添加如下依赖
[java] view plain copy print ?
- compile 'com.githang:android-crash:1.0'
后面的3个是可选的,如果用邮件的方式发送的话,需要添加jar包,和添加相应的依赖
其实上述的添加依赖是可以自动完成的,当你把jar包导入后,然后邮件你的jar包,会出现add to library,你添加后,会在依赖中发现已经帮你自动添加了。
2,属性配置
自定义一个类,让其继承于Application,并在AndroidManifest.xml中的application节点中使用name属性,将类名添加进去,这样当程序一启动就会先执行继承自application类里面的配置,最后要别忘了添加权限,一个是网络权限,一个是往sd卡写的权限
[java] view plain copy print ?
- 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("xxxx@163.com");
- 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 具体的原理可参见此文
附加:
这也是我后来在运用中才发现的,所以就也写在这里好了,下面的内容是介绍一个非常强大、非常牛掰的一个bug收集服务器.免去了自己搭建的功夫,以及邮件查看时要下载日志的不便。
腾讯 Bugly,是腾讯公司为移动开发者开放的服务之一,面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。Bugly 能帮助移动互联网开发者更及时地发现掌控异常,更全面的了解定位异常,更高效的修复解决异常。
这里我就不浪费笔墨在此去教如何使用了,毕竟官方的更专业,相信你也更相信官方的文档。链接如下:http://bugly.qq.com/androidfast
给张官方示例的截图看看,相信你会喜欢上使用它的
以上是关于Android程序崩溃异常处理之自动发送邮件的主要内容,如果未能解决你的问题,请参考以下文章
Android logcat:使用电子邮件从设备发送日志条目
Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )