• Android 系统的异常信息捕获


    一、 Android tombstone

    记录native进程crash 奔溃时, 系统的数据信息。

    TOMBSTONE 是 Android 用来记录 native 进程崩溃的 core dump 日志, 系统服务在启动完成后会增加一个 Observer 来侦测 tombstone 日志文件的变化, 每当生成新的 tombstone 文件, 就会增加一条 SYSTEM_TOMBSTONE 记录到 DropBoxManager 中.

    What a Terrible Failure简称WTF,WTF是Android系统记录错误的一种方式,报告一个永远不应该发生的情况,有些只是打印Error stack trace和存异常信息文件到dropbox,有些会crash app。

    二、dropbox

    Android DropBox 是 Android 用来持续化存储系统数据的一个管理类,主要用于记录 Android 运行过程中, 内核, 系统进程, 用户进程等出现严重问题时的 log, 可以认为这是一个可持续存储的系统级别的 logcat

    系统服务dropbox以文件形式记录了系统各种异常信息,例如app crash、native crash、anr、kernel panic等等。

    /frameworks/base/core/java/android/os/DropBoxManager.java

    /frameworks/base/services/core/java/com/android/server/DropBoxManagerService.java

    dropbox日志路径:/data/system/dropbox

    1、DropBoxManager dropbox = (DropBoxManager)getSystemService(Context.DROPBOX_SERVICE) 例如,dropbox.addText可实现把需要记录的数据丢给dropbox进行存储。

    2、监听广播android.intent.action.DROPBOX_ENTRY_ADDED,可知系统发生了异常 注意权限:android.permission.READ_LOGS --- 平台签名或priv-app

     
    

    java层:handleApplicationCrashInner("crash", r, processName, crashInfo); native层: mAm.handleApplicationCrashInner("native_crash", mApp, mApp.processName, ci);

    DEFAULT_AGE_SECONDS = 3 * 86400:文件最长可存活时长为3天

    DEFAULT_MAX_FILES = 1000:最大dropbox文件个数为1000

    DEFAULT_QUOTA_KB = 5 * 1024:分配dropbox空间的最大值5M

    DEFAULT_QUOTA_PERCENT = 10:是指dropbox目录最多可占用空间比例10%

    DEFAULT_RESERVE_PERCENT = 10:是指dropbox不可使用的存储空间比例10%

    QUOTA_RESCAN_MILLIS = 5000:重新扫描retrim时长为5s

    上面这些都是默认值,完全可以通过设置content://settings/global数据库对应项来修改。

    使用dropbox的优点

    a.利用 DropBoxManager 来记录需要相对持久化存储的错误日志信息

    优点:自动抓错, 避免人为因素而产生的错误遗漏

    b.错误自动上报

    可以利用dropbox每生成新的记录, Dropbox 就会发送广播:

    DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED

    app可以接收监听改广播获取指定的数据文件内容,内容发送到指定的服务器或邮箱完成错误自动上报。

    利用前提:app要具有系统权限 因为:DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED是保护性广播,且读取系统日志也需要android.Manifest.permission.READ_LOGS权限。

  • 相关阅读:
    Spring Boot启动流程分析
    云原生之旅 - 6)不能错过的一款 Kubernetes 应用编排管理神器 Kustomize
    DelayQueue 使用和延时功能源码分析
    六、python的csv模块
    Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
    你绝对需要的Facebook养号攻略,教你如何养成耐用号
    bit byte 和各进制关系(位、字节、字符、进制)、常见编码格式
    图神经网络-GraphSage
    YOLOv5改进实战 | 更换主干网络Backbone(三)之轻量化模型Shufflenetv2
    ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
  • 原文地址:https://blog.csdn.net/jx232515/article/details/127622003