记录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。
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数据库对应项来修改。
a.利用 DropBoxManager 来记录需要相对持久化存储的错误日志信息
优点:自动抓错, 避免人为因素而产生的错误遗漏
b.错误自动上报
可以利用dropbox每生成新的记录, Dropbox 就会发送广播:
DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED
app可以接收监听改广播获取指定的数据文件内容,内容发送到指定的服务器或邮箱完成错误自动上报。
利用前提:app要具有系统权限 因为:DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED是保护性广播,且读取系统日志也需要android.Manifest.permission.READ_LOGS权限。