Android崩溃日志收集-发送至邮箱

App在测试中,上线后,出现崩溃的情况是很常见的,那么崩溃日志的收集就显得尤为重要。无法收集崩溃日志就无法定位问题,修复问题。

下面总结下崩溃日志的收集方式之一:发送邮件至指定邮箱

此功能的开发需要两个邮箱,一个发件箱,一个收件箱,当出现崩溃的时候,发件箱会发送邮件至收件箱,开发通过浏览收件箱中的崩溃邮件,来对APP进行修复。

两步:

1. 集成acra,捕捉crash日志;

2. 集成邮箱功能,将日志自动发送至指定邮箱。

集成acra

https://github.com/ACRA/acra

acra目前最新的版本是5.1.3,但是集成文档不太好理解,按照baseSetup集成总是出现各种问题。

现在选择使用4.9.2版本。

1. 配置依赖版本

acraVersion        : "4.9.2"//5.1.3
acra               : "ch.acra:acra:${dependencies.acraVersion}"
2. 引入依赖
//crash
implementation rootProject.ext.deps.acra

3. Application中

@ReportsCrashes(
        reportSenderFactoryClasses ={MySenderfactory.class},
        customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL, ReportField.CUSTOM_DATA, ReportField.STACK_TRACE, ReportField.LOGCAT },
        resToastText = R.string.acra_toast_text
)
public class MyApplication extends MultiDexApplication {...

@Override
protected void attachBaseContext(Context base) {
    MultiDex.install(this);
    super.attachBaseContext(base);
    ACRA.init(this);
}

集成邮箱功能

准备工作:

1. 发件箱:获取正确的host,port,例如qq邮箱,默认host用stmp,需要开通POP3/SMTP服务,并获得开通服务时候的授权码。

2. mail.jar包,additionnal.jar包,activation.jar包,下载地址:???

3. Mail.class类。

步骤:

1. 自定义MySenderfactory类和MySender类;

2. 重写MySender类的send方法,如下:

@Override
    public void send(@NonNull Context context, @NonNull CrashReportData crashReportData) throws ReportSenderException {
        //发送邮件
        Mail mail = new Mail("发件箱", "授权码");
        mail.set_to(new String[]{"收件箱"});//接受者邮箱 可以是多个
        mail.set_from("发件箱");//邮件来源
        mail.set_subject("邮件主题");//设置主题标题
        mail.setBody(crashReportData.toString());
        try {
            if (mail.send()) {
                Log.i("ACRA", "send: 发送成功");
            } else {
                Log.i("ACRA", "send: 发送失败");

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

遇到的问题

1. 发送失败,stmp服务要开通,host和端口要正确;

2. release版出现javax.mail.nosuchproviderexception smtp;

几个架包要做混淆:

-keep class javax.mail.**{*;}
-keep class javax.mail.internet.**{*;}
-keep class org.apache.commons.mail.**{*;}
 
-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}
-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}

注意也要加acra的混淆,具体查阅github上的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值