欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-15 18:41:21
...

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上的介绍。

相关标签: crash收集