使用acra监控app运行时的崩溃日志,并上报服务器,方便排错。

acra是一款优秀的开源日志上报项目。它可以在你软件运行发生anr,carsh,oom等崩溃状况时拦截并收集报错信息上报服务端,与友盟等三方报错收集sdk功能相似,胜在稳定开元,可以根据需求方便自己定制。

使用方便简单可以编译成jar包(PS:jar包资源已经上传),可以将源码直接放入项目,也可以在build中直接添加依赖。使用详情可以参照 https://github.com/ACRA/acra/wiki/AdvancedUsage 官方的wiki。

这里讲一下acra 4.9 的使用:

一.acra的初始化

1.第一种基本使用方式:

@ReportsCrashes(formUri = "" , // 上报服务器的urlmode = ReportingInteractionMode.SILENT, //静默上报,没有任何提示reportType = HttpSender.Type.JSON,  //数据格式jsonhttpMethod = HttpSender.Method.POST,  //上报方式postcustomReportContent = {DROPBOX},  // 可选保留长文本或数据块includeDropBoxSystemTags = true, //是否检索系统标记事件dropboxCollectionMinutes = 30  // 设置上报的数据截取时间,这里截取前30分钟的)
public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);ACRA.DEV_LOGGING = true;  // 是否进行log输出ACRA.init(this);  //acra初始化}
}

其中使用customReportContent ,includeDropBoxSystemTags 需要权限

<uses-permission android:name="android.permission.READ_LOGS" />,当app拥有系统级权限时可以监测整机的报错日志,做整机源码开发时使用也很方便的可以监测整个系统的报错信息,方便调试抓错。

返回系统标记事件:

  • system_app_anr
  • system_app_wtf
  • system_app_crash
  • system_server_anr
  • system_server_wtf
  • system_server_crash
  • BATTERY_DISCHARGE_INFO
  • SYSTEM_RECOVERY_LOG
  • SYSTEM_BOOT
  • SYSTEM_LAST_KMSG
  • APANIC_CONSOLE
  • APANIC_THREADS
  • SYSTEM_RESTART
  • SYSTEM_TOMBSTONE
  • data_app_strictmode

2.第二种基本使用方式:

第一种是使用注解的方式,简单方便,但是注解中的参数只能使用常量,当你有些特殊需求要求动态地址变动等就无法适用,但我们还可以使用configuration。

public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);ConfigurationBuilder c = new ConfigurationBuilder(this);c.setFormUri("") // 服务器地址.setMode(ReportingInteractionMode.SILENT) //静默上报.setReportType(HttpSender.Type.JSON).setHttpMethod(HttpSender.Method.POST).setCustomReportContent(new org.acra.ReportField[]{DROPBOX}).setIncludeDropboxSystemTags(true).setDropboxCollectionMinutes(30).setSocketTimeout(60000); //设置超时ACRA.DEV_LOGGING = true;ACRA.init(this, c); //acra初始化}
}

使用此方式可以使用变量,可以根据需求添加变动配置。

接入时记得在AndroidManifest.xml中添加:

<service android:name="org.acra.sender.SenderService"></service>

到此完成以上这两种方式接入后,已经可以使用acra了。

二.acra主动上报:

对于不同的开发需求,我们有时候会有需求要求acra主动上报多少时间段内的报错信息。

这个时候我们可以写个定时器主动触发acra进行上报:

private void setAlarm() {AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);int anhour = 30*60*1000;Intent alarmIntent = new Intent(this, ReportService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, java.lang.System.currentTimeMillis(), anhour, pendingIntent);}

使用AlarmManager可以长时间精准计时。

使用pendingIntent开启一个service,该service继承IntentService执行完后会自动销毁。

public class ReportService extends IntentService {public ReportService() {super("ReportService");}@Overridepublic void onCreate() {super.onCreate();}@Overrideprotected void onHandleIntent(Intent intent) {//ACRA主动触发上报,handleSilentException可以自己定义报错,不需要的穿nullACRA.getErrorReporter().handleSilentException(null);}@Overridepublic void onDestroy() {super.onDestroy();}
}

如此联合上面的初始化,就做到了每隔30分钟就会上报一次30分钟内的所有标记报错信息。

三.上报格式(基于我上面初始化的json格式):

ACRA: {"REPORT_ID":"e7395f2a-12eb-4b4d-a4ef-d48f9348381d","STACK_TRACE":"Report requested by developer\n","USER_APP_START_DATE":"2011-12-01T00:00:20.602+08:00","USER_CRASH_DATE":"2021-07-20T10:25:53.167+08:00","DROPBOX":"Tag: system_app_anr\nNothing.\nTag: system_app_wtf\nNothing.\nTag: system_app_crash\nNothing.\nTag: system_server_anr\nNothing.\nTag: system_server_wtf\nNothing.\nTag: system_server_crash\nNothing.\nTag: BATTERY_DISCHARGE_INFO\nNothing.\nTag: SYSTEM_RECOVERY_LOG\nNothing.\nTag: SYSTEM_BOOT\nNothing.\nTag: SYSTEM_LAST_KMSG\nNothing.\nTag: APANIC_CONSOLE\nNothing.\nTag: APANIC_THREADS\nNothing.\nTag: SYSTEM_RESTART\nNothing.\nTag: SYSTEM_TOMBSTONE\nNothing.\nTag: data_app_strictmode\nNothing.\n","IS_SILENT":true}

系统标记事件以tag形式上报,没有则nNothing。

到此就结束了,大部分接口说明官方文档都有,此部分是自己整理分享一下。

Android acra 监控报错日志上报(acra版本4.9)相关推荐

  1. android.view.InflateException: Binary XML file line(报错日志要从下往上看)

    报错日志要从下往上看 今天引入https://github.com/wowhellogo/PageGridView 但是引入不进来,就下载了PageGridView这个类的源码 一运行结果报错,看报错 ...

  2. JNI 编码中遇到 Fatal signal 11 (SIGSEGV)查看报错日志

    2022-09-14 09:19:01.092 3562-3580/com.derry.opengl A/libc: Fatal signal 11 (SIGSEGV), code 1, fault ...

  3. Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin

    Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin 这个问题自己大致在 ...

  4. 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )

    文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...

  5. 【错误记录】Android Studio 编译报错 ( SDK location not found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...

  6. 【错误记录】Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )

    文章目录 一.报错信息 二.解决方案 一.报错信息 运行 Android 应用时 , 报错 ; 报错信息如下 : 2021-08-04 21:04:12.067 26338-26338/com.exa ...

  7. 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : FAILURE: Build failed with an exception.* What went ...

  8. php fpm 日志记录,如何解决nginx下php-fpm不记录php报错日志的问题

    如何解决nginx下php-fpm不记录php报错日志的问题 发布时间:2020-07-28 10:17:29 来源:亿速云 阅读:150 作者:Leah 本篇文章为大家展示了如何解决nginx下ph ...

  9. android 编译报错,android avc 编译报错neverallow问题查找

    android avc 编译报错neverallow问题查找 2020年08月11日 | 萬仟网移动技术 | 我要评论 在修改avc后,有时候编译会报错neverallow.这个具体是在什么地方定义的 ...

最新文章

  1. 基于单幅图像一致性学习的弱光视频增强(CVPR2021)
  2. 常见的面向对象的面试题(附答案)
  3. JavaScript实现combine With Repetitions结合重复算法(附完整源码)
  4. python连接数据库mysql错误1045_django 连接数据库出现1045错误的解决方式
  5. 小程序多个echars_小程序界面与逻辑
  6. blogCommed
  7. sqlite 检索的字段结果前加空格_MySQL5.7分词全文检索思路
  8. Python Selenium 调用IE浏览器失败Unexpected error launching Internet Explorer解决方法
  9. ubuntn 16.04.2下caffee的安装教程
  10. 【小白学前端】化腐朽为神奇-Bootstrap实现表单美化(day02-6)
  11. CentOS7:Ruby安装
  12. 我爱淘冲刺阶段站立会议每天任务4
  13. 从汇编的角度理解什么是引用
  14. 安卓远程连接linux软件,推荐Windows、Linux安卓远程软件
  15. Go语言学习笔记—golang标准库xml包
  16. 测试中文编码_如何通过带回家的编码测试
  17. Altium Designer(AD)多边形铺铜
  18. 《代码实例》Element-Ui树形菜单和echarts图
  19. go语言学习笔记(四):调度器基础-爬上那座山
  20. 算法优化---向量数组计算替代元素级别判断

热门文章

  1. 利用PyQt5和QSS制作本地音乐播放器(初稿)
  2. 线性回归模型(简单线性回归、局部线性回归、非线性关系)从理论到Python实现.整理...
  3. 不要错误使用聚集索引
  4. [golang] golang实现截取字符串函数SubStr
  5. 6款实用超火AI工具推荐,ChatGPT,Midjourney ,Notion AI ,Tome ,Descript ,Runway
  6. 安卓ScrollView向上滑动控件顶部悬浮效果实现
  7. 货车版“滴滴打车”搬运帮融资5000万 已有6万名司机 服务40万用户
  8. 真实评测 r7 3700u和i5 8265u哪个好 r73700u和i58265参数对比
  9. 组装电脑配置推荐5000元左右 2021年5000元电脑最强组装
  10. 盘点2021上半年电商直播行业发生过的大事