Android崩溃日志收集-发送至邮箱
App在测试中,上线后,出现崩溃的情况是很常见的,那么崩溃日志的收集就显得尤为重要。无法收集崩溃日志就无法定位问题,修复问题。
下面总结下崩溃日志的收集方式之一:发送邮件至指定邮箱。
此功能的开发需要两个邮箱,一个发件箱,一个收件箱,当出现崩溃的时候,发件箱会发送邮件至收件箱,开发通过浏览收件箱中的崩溃邮件,来对APP进行修复。
两步:
1. 集成acra,捕捉crash日志;
2. 集成邮箱功能,将日志自动发送至指定邮箱。
集成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上的介绍。
上一篇: Process xxxx (pid xxx) has died的另外一种错误分析
下一篇: SSH下Hibernate事务问题createCriteria is not valid without active transaction
推荐阅读
-
Android 如何收集已发布程序的崩溃信息
-
Android之崩溃日志管理
-
Android 如何收集已发布程序的崩溃信息
-
分包收集 android 运行的 logcat 日志
-
【Android】【源码分析】系统各类异常日志收集服务(DropBoxManagerService)
-
【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
-
android App Crawler(兼容性测试:非常好用)崩溃后马上停止,展示日志
-
Android之崩溃日志管理
-
教你一行命令定位Android logcat崩溃日志一闪而过的问题
-
Android 日志错误收集