愿历尽千帆 归来仍少年

Android 系统层捕捉所有应用崩溃情况推送到钉钉实践之路

字数统计: 526阅读时长: 2 min
2019/03/11

项目痛点
出现偶现崩溃或ANR,因为没有开启日志开关,后面尝试复现又比较困难,研发同事比较苦恼,无从下手
还有一个测试同事抓取日志后还要记录时间点,再上传到JIRA上,研发同事下载日志还需要搜索报错点,整个流程比较费时

初步想法
可不可以将所有ANR,Crash等出错信息的关键日志片段直接传给服务器,在后面的摸索过程中发现钉钉可以提供对外的URL接口,这样的话直接传给钉钉就很方便了,正好平时的办公用的也是这个软件,这样一来就省去了很多的步骤,一步到位

以下是实做的步骤记录,只是实现了一个初稿,后面还需要不断优化完善

Step1: 获取钉钉的Webhook地址
这个地址后面作为推送的目标地址

在钉钉中添加机器人接口的步骤参见官网文档
https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.XJQ2yZ&treeId=257&articleId=105735&docType=1

通过以上步骤拿到了Laucnher的Webhook地址,如下:
https://oapi.dingtalk.com/robot/send?access_token=a937a86122149aa52a694dd79fae2cdec1c7e448c62bff31471088ec13e941

Step2:源码层增加上报机制
之所以考虑在源码层中修改,是因为我们需要监测系统中所有应用的出错情况,想到AMS中的Crash弹框,猜想其中一定有相关的写入报错日志的操作









这里调用了handleApplicationCrashInner这个函数,接着看这个函数










这里追加了一行日志,在应用层添加会造成crash的代码片段,看看这行日志打出的信息

















这里会打出eventtype类型,报错进程,以及关键的堆栈信息,其中的eventtype包括了watchdoganrwtflowmemnative_crashcrash
完全满足我们的要求,接下来就是如何把这段发给钉钉了
handleApplicationCrashInner中增加接口reportAllErrorToXunDingTalk








reportAllErrorToXunDingTalk接口如下:

























这个时候应用端报错的话话,钉钉群会收到消息
















good night!
CATALOG