Android 程序崩溃日志邮件获取

作者: BRYANB | 来源:发表于2017-02-17 10:37 被阅读691次

版权声明:本文为博主原创文章,未经博主允许不得转载。

在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没有连接ADT或者AS的情况下,我们很难获取到崩溃的日志,当然,如果你的手机获取到了最高的root权限,可以下载一些软件来得到log,比如:ES文件浏览器等。但是,并不是所有手机都能root,而且如果是在客户在使用,种种情况下,导致我们不能及时和准确的获取到崩溃的原因,从而迅速的解决问题。基于这个原因,下面分享一个很好获取到崩溃时日志的方法

第一步:导入mail.jar

首先我们将下载好的mail.jar导入到项目中去。

第二步:初始化

在Application中进行初始化

// crash记录及上传

CrashHandler.getInstance().init(this);

第三步:开始编码CrashHandler

CrashHandler类主要用于收集错误信息 发送错误报告。

1、由于我们在很多地方都会使用到CrashHandler的对象,所以单例模式最好不过了。

/** 获取CrashHandler实例 ,单例模式 */

public static CrashHandler getInstance() {

if(INSTANCE==null) {

INSTANCE=newCrashHandler();

}

return INSTANCE;

}

2、初始化初始化,注册Context对象, 获取系统默认的UncaughtException处理器, 设置该CrashHandler为程序的默认处理器

public void init(Context ctx) {

mContext= ctx;

mDefaultHandler= Thread.getDefaultUncaughtExceptionHandler();

Thread.setDefaultUncaughtExceptionHandler(this);

3、CrashHandler需要继承UncaughtExceptionHandler接口,用于收集数据。

public class CrashHandler implements UncaughtExceptionHandler

实现UncaughtExceptionHandler的回调接口uncaughtException;

图1

自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑

图2

collectCrashDeviceInfo是收集程序崩溃的设备信息的方法;restart()是崩溃后重新启动应用的方法;saveCrashInfoToFile是保存错误信息到SD卡中,然后发送日志到你的邮箱中。

图3 图4

后续由于截图问题。没有截图完全,但是主要demo已经截完= =;

做到这里。就只差发邮件这一步了。

第四步:发邮件

这里新建了一个工具类EmailUtil用于操作发送邮件。

主要用到2个方法。不过在此之前需要注册网易邮箱,因为我使用的是smtp163服务器。

由于下面的篇幅比较大,又比较重要,所以直接po了上来就没截图了。原谅新手不会用简书。。。

public static void SendEmail(String host,finalString address, String from,finalString password, String to, String port, String subject, String content)throwsException {

Multipart multiPart;

String finalString ="";

Properties props = System.getProperties();

props.put("mail.smtp.starttls.enable","true");

props.put("mail.smtp.host", host);

props.put("mail.smtp.user", address);

props.put("mail.smtp.password", password);

props.put("mail.smtp.port", port);

props.put("mail.smtp.auth","true");

Log.i("Check","done pops");

Session session = Session.getDefaultInstance(props,newAuthenticator() {

protectedjavax.mail.PasswordAuthentication getPasswordAuthentication() {

//此处必须做验证,才能发送邮件

returnnewjavax.mail.PasswordAuthentication(address,

password);

}

});

DataHandler handler =newDataHandler(newByteArrayDataSource(finalString.getBytes(),"text/plain"));

MimeMessage message =newMimeMessage(session);

message.setFrom(newInternetAddress(from));

message.setDataHandler(handler);

Log.i("Check","done sessions");

multiPart =newMimeMultipart();

InternetAddress toAddress;

toAddress =newInternetAddress(to);

message.addRecipient(Message.RecipientType.TO, toAddress);

Log.i("Check","added recipient");

message.setSubject(subject);

message.setContent(multiPart);

message.setText(content);

Log.i("check","transport");

Transport transport = session.getTransport("smtp");

Log.i("check","connecting");

transport.connect(host, address, password);

Log.i("check","wana send");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

Log.i("check","sent");

}

到此,整个功能就完成了。其实很简单的,主要是采集崩溃信息和保存以及发送邮件。写的不好,但是能够满足需求,希望大家能够在其中获益,我也会继续。


相关文章

  • Android 程序崩溃日志邮件获取

    版权声明:本文为博主原创文章,未经博主允许不得转载。 在我们开发Android应用程序的时候,BUG的出现是难以避...

  • iOS上获取崩溃日志的N+1种方法

    iOS上获取崩溃日志的N+1种方法 正常情况下,程序崩溃之后都会有崩溃日志保存在我们的手机里面,当崩溃的时候,我们...

  • iOS上获取崩溃日志的N+1种方法

    iOS上获取崩溃日志的N+1种方法 正常情况下,程序崩溃之后都会有崩溃日志保存在我们的手机里面,当崩溃的时候,我们...

  • 图形化分析crash日志

    崩溃的日志的获取 是调试程序过程中一个重要的环节.每个程序都会有bug,但是你多久能拿到崩溃日志,多久能够通过这些...

  • Android 捕获异常exception,GreenDao存取

    app上线后并不能保证程序不会崩溃,为了更好的优化项目,需要获取异常日志,供开发人员修改bug,所以希望在程序崩溃...

  • ios崩溃分析

    崩溃日志的获取 崩溃日志的获取:ios设备上的应用闪退之后会生成崩溃报告存储在设备上,可以通过这样几种途径获取设备...

  • crash-log看什么

    获取crash-log:将手机连接到电脑上,看android studio下的error日志 崩溃情况 1.手机系...

  • 代码:android崩溃日志收集和处理

    用来处理android崩溃日志收集的代码,详情的使用请转:android崩溃日志收集和处理 第一个类 /** ...

  • iOS开发-使用dSYM文件符号化Crash日志

    1、获取crash日志 通过Xcode获取到崩溃日志,方法是Xcode->Window->DevicesView ...

  • Android收集程序崩溃日志

    前言 简述一下故事背景: 这篇文章是基于我们自己项目的方案完善的,,首先市面的技术方案都一样,所以,前半部分的基础...

网友评论

  • 5adc55f709f2:写的很详细,能来一份demo看看吗,谢谢 wyb_121219@163.com
  • CROAD:大神,可以发个demo给我吗?我邮箱515656206@qq.com, 麻烦你了哦
  • CROAD:大神,使用mail.jar包发送日志,用户崩溃需要输入账号密码吗,导入mail.jar包的时候,需要下载activation.jar和mail.jar包,两个jar吗?
  • 9527_67a6:希望能学习一下大神的 源码:blush: 1320843016@qq.com
  • 追风筝的人_yc:楼主可以发一份代码吗
  • a566b6fc5d33:建议用ACRA吧,开源的。
    BRYANB:@迷一样的名人 百度很多啊
    2e53439a203c:楼主,jar包在哪下啊?找了半天没找到啊
    BRYANB:@kaient 好咧,回头研究下。多谢指点。:relaxed:
  • 努力爲明天:写的挺好的,有完整的demo吗?这样看不是很方便,还有邮箱那块注释麻烦能加一下,毕竟我们拿来用的话,会去换成自己的信息,写清楚,大家更方便操作!
    努力爲明天:@BRYANB 或者发163邮箱也可以,我忘了你好像写着要用163的,hjr19911126@163.com
    努力爲明天:@BRYANB 好的,谢谢了,麻烦你了,365708064@qq.com
    BRYANB:可以啊 。你给我邮箱吧,发给你,你稍微做点修改就可以用了。
  • Blacoo:很详细

本文标题:Android 程序崩溃日志邮件获取

本文链接:https://www.haomeiwen.com/subject/znskwttx.html