You need to enable JavaScript to run this app.
导航

Android崩溃防护

最近更新时间2023.10.12 18:00:09

首次发布时间2023.10.12 18:00:09

Android崩溃防护提供Java崩溃和Java启动崩溃防护,可以增加App稳定性,提升用户体验。异常防护的集成对业务代码没有任何侵入性,能够进行异常后的兜底,并将问题上报到平台,帮助您及时发现问题。
系统检测到程序未进行try-catch的Java异常,默认在KillApplicationHandler中强制退出应用,并弹出一个应用崩溃的对话框。发生这种Java崩溃时,您可以给应用设置自定义的UncaughtExceptionHandler。Java崩溃监控工具通常利用UncaughtExceptionHandler来收集异常信息,正常情况按链路最终还是会走到KillApplicationHandler,退出应用。而Android崩溃防护功能实现了自己的UncaughtExceptionHandler,根据平台下发的配置对异常画像进行匹配,匹配成功则消费掉异常,结束链路调用,使应用正常运行。如果是主线程发生的崩溃,防护后将会重启loop,继续处理消息队列中的消息。如果是子线程发生异常,将会退出或挂起。需要注意的是,主线程和子线程都无法执行崩溃点之后的程序逻辑。

注意

主线程发生的崩溃,防护后ApmPlus SDK会重启looper,再次发生未防护的崩溃,堆栈中会包含com.apm.insight,可以忽略。

前提条件

崩溃防护配置

注意

  • Android的崩溃防护无法继续执行崩溃位置后的程序逻辑。重要的业务逻辑和防护后有可能导致用户体验下降的场景不建议开启防护。每条规则都应该谨慎评估后创建,充分测试后下发。
  • SDK检测到崩溃堆栈中包含onCreate、onStart、onResume、onPause方法时,将不进行防护。

默认兜底策略

崩溃防护配置页面内置的策略就是默认兜底策略。默认兜底策略是根据经验总结的一些非业务代码导致的程序异常,异常发生时通常不会对程序产生显著影响。策略默认关闭,需要使用时请在崩溃防护配置页面打开开关并配置采样率。
图片

创建崩溃防护配置

  1. 登录应用性能监控全链路版控制台

  2. 单击目标应用下的App端监控

  3. 在控制台左上角选择全部功能 > 崩溃防护配置

  4. 崩溃防护配置页面,打开列表右上角的总开关,然后单击创建配置

  5. 创建配置页面,完成以下配置,然后单击确认
    图片
    配置项说明:

    配置项

    说明

    规则名称

    自定义规则名称,用于标识该崩溃防护规则。
    支持中文、大小写字母、数字、特殊符号,长度没有限制。

    规则状态

    配置崩溃防护规则的状态。默认为打开。
    如果规则状态配置为关闭,那么该规则不下发。

    特征值

    配置崩溃防护的特征值,用于匹配崩溃画像。一个崩溃防护规则支持添加多组崩溃画像,崩溃画像之间是或的关系,共用当前策略的筛选条件。

    • 必填的特征值为发生崩溃的类、发生崩溃的方法、异常类类名。

      注意

      • 发生崩溃的类和发生崩溃的方法必须为同一行堆栈,异常类类名为堆栈所处的Throwable或者Cause的类名。
      • 尽量选择堆栈中特有的崩溃类和方法,最好取业务堆栈,没有业务堆栈尽量取系统功能模块堆栈,避免选取系统工具类堆栈。
      • 发生崩溃的类:发生崩溃的类混淆后的完整类名,可以从崩溃堆栈中选取。
      • 发生崩溃的方法:发生崩溃的类的崩溃方法,混淆后的全称。
      • 异常类类名:Throwable的完整类名。
    • 单击新增特征值,可以选填特征值。例如,崩溃进程名称、崩溃线程名称、APP小版本号、异常信息。特征值的取值长度必须在0~30之间。
      • 崩溃进程名:发生崩溃的进程的名称。如果不填,规则匹配所有进程。
      • 崩溃线程名:发生崩溃的线程的名称。如果不填,规则匹配所有线程。
      • APP小版本号:应用的version_code。如果不填,规则匹配所有版本。
      • 异常信息:可以截取Throwable的Message的部分作为特征匹配。如果Throwable的Message为空,不需要填写。

    筛选条件

    配置崩溃防护的筛选条件,平台会根据筛选条件下发配置。如果特征值里配置了多组崩溃画像,筛选条件对所有崩溃画像生效。

    • 单击添加筛选,可以自定义筛选条件。例如,设备机型、下载渠道、设备系统版本、设备ID。
      例如,筛选条件配置了设备机型为小米10,那么只有小米10能收到配置了上述特征值的崩溃画像,发生崩溃时才能根据崩溃画像来匹配SDK防护。

    采样率

    配置崩溃防护的采样率,可以用于灰度验证。

其他操作

  • 编辑崩溃防护配置
    在崩溃防护列表中,单击编辑,可以修改已创建的崩溃防护配置中所有的配置项。
  • 复制崩溃防护配置
    在崩溃防护列表中,单击复制,可以保留已创建的崩溃防护配置的配置项,只需要您自定义规则名称。
  • 删除崩溃防护配置
    在崩溃防护列表中,单击删除,在二次确认框中单击删除,即可删除该配置。
  • 查看防护数据
    在崩溃防护列表中,单击查看防护数据,即可跳转到崩溃防护页面查看崩溃防护的详细信息。

崩溃防护配置应用

在Java崩溃或者Java启动崩溃页面,评估适合进行防护后,可以在原始堆栈页签中单击崩溃防护按钮,平台将根据当前崩溃信息自动生成一条崩溃防护策略。自动生成的崩溃策略根据聚合信息选取崩溃画像,选取信息不一定合理,可以根据实际情况进行调整。
图片

注意

资源耗尽类型崩溃不建议生成防护,很可能导致卡顿,最终还是会崩溃。

崩溃防护

崩溃防护中的统计数据可以帮助应用拦截的异常,但后续仍需要对issue做处理和修复。

筛选条件

您可以通过以下筛选条件进行Android系统的数据筛选:
时间、崩溃详情、设备ID、User ID、issue新增状态、前后台、系统版本、机型、APP版本、APP小版本号、APM SDK版本、下载渠道、ROM信息、省份、使用时长、进程名、厂商、解析情况、APP页面、issue状态、处理人、标签、自定义维度、PV自定义维度。

注意

在自定义维度添加了保留字段rule_id作为筛选条件后,如果开启崩溃防护功能,不建议在崩溃监控中使用rule_id自定义维度。

崩溃拦截趋势

崩溃拦截趋势展示了筛选条件下崩溃拦截指标的趋势图,您也可以将趋势图按照分组维度展示。指标数据的右侧可以查看与上一周期相比崩溃拦截数据的变化。
图片
指标说明:

指标

说明

拦截崩溃次数

已成功拦截的崩溃的次数

拦截崩溃率

筛选条件下的拦截崩溃次数/筛选条件下的总launch数

拦截崩溃人数

筛选条件下的去重拦截崩溃人数

拦截崩溃用户比例

筛选条件下发生拦截崩溃错误的去重UV数/筛选条件下的去重总UV数

用户数

筛选条件下已拦截崩溃的去重UV数

崩溃拦截分布

崩溃拦截分布通过多维分析来了解已拦截的异常崩溃的分布情况以定义问题。
图片

  • 悬停在分布图上可以查看当前分类的全称,以及在该指标类型中的占比。
  • 默认以系统版本机型APP版本APP小版本号4个维度展示已拦截的崩溃的分布情况,支持单击设置按钮选择其他维度,例如APM SDK版本、前后台、下载渠道、ROM信息等等。
  • 默认根据上报量展示错误的分布情况,您也可以配置为根据用户量展示拦截崩溃的分布。

拦截异常崩溃列表

拦截异常崩溃列表中展示了同一类已拦截的异常崩溃聚合后的issue数据,包括影响用户数、发生次数、崩溃率、最近发生时间、日志上报时间、状态、处理人。
图片

  • 崩溃说明:单击可以跳转到崩溃详情中查看更多崩溃信息。
  • 影响用户数:单击数字后的图标可以预览趋势图,悬浮趋势图可以查看对应的时间。
  • 发生次数:单击数字后的图标可以预览趋势图,悬浮趋势图可以查看对应的时间。
  • 崩溃率:该类拦截异常崩溃的崩溃次数/总launch数。
  • 最新发生时间:最近一次拦截异常崩溃的时间。
  • 日志上报时间:该拦截异常崩溃信息到服务端的时间。
    例如,拦截异常崩溃的发生是在version 1.0版本,但是上报是在version 1.2版本,为了避免信息差,列表会把问题发生时和上报时所有的现场信息进行上报。
  • 排序:列表默认按照影响用户数、发生次数、崩溃率降序排序。单击最近发生时间日志上报时间,可以按照时间降序或者升序排序。
  • 下载:单击右上角下载按钮,下载前100条数据,以.xlsx的文件格式展示列表中的数据。
  • 设置:单击右上角设置按钮,可以自定义列表展示的列数据。除了默认的列数据,您还可以配置:同比发生次数、同比影响用户数、同比崩溃率、影响用户率、同比影响用户率、起止版本。

崩溃详情

issue概述

图片

拦截崩溃趋势

详情崩溃趋势展示了该类issue的崩溃数和影响用户数两个指标的变化趋势。
详情拦截崩溃趋势图和列表拦截崩溃趋势不同,区别如下:

  • 列表拦截崩溃趋势:时间范围内所有已拦截的异常崩溃。
    例如,7天为时间周期,1小时为聚合粒度,可以看到7天内每小时的拦截崩溃趋势,崩溃次数20。
  • 详情拦截崩溃趋势:时间范围内所有已拦截的异常崩溃的聚合。
    例如,7天为时间周期,1小时为聚合粒度,崩溃列表中有5个崩溃项,即系统将20次崩溃分类为5个崩溃项,打开其中一个崩溃项,详情拦截崩溃趋势是同一类崩溃项在7天内的崩溃趋势。

详细信息

详细信息可以查询单次crash的各字段属性。
图片

  • 显示自定义维度:单击可以展示自定义维度。
  • 追查:单击设备标识ID或UserID旁的追查可跳转至**日志查询,**以查询完整的上下文日志流。
  • 通过右上角,可切换crash。

原始堆栈&Retrace

图片

  • 原始堆栈展示的原始堆栈信息,即客户端上传的原始日志中的堆栈信息。
  • Retrace展示的是经过符号化之后的堆栈。
    • 系统堆栈会被处理。
    • 如果未上传符号表,客户端堆栈不会被处理。
    • 如果已上传符号表,客户端堆栈仍未处理,可能是符号表未全部上传。
  • 如果符号表或解析有误,可以重新上传符号表,然后在Retrace的界面单击重试Retrace
  • 复制堆栈便于互相配合分析堆栈信息。

符号表

在符号表页面,手动上传符号表。
图片
上传符号表后效果如下:
图片

现场数据

现场数据展示了发生崩溃防护时的程序运行状态。
图片