AppErrorsTracking多进程与多用户异常捕获:ProcessRecord深度解析
AppErrorsTracking多进程与多用户异常捕获ProcessRecord深度解析【免费下载链接】AppErrorsTrackingAdded more features to apps crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.项目地址: https://gitcode.com/gh_mirrors/ap/AppErrorsTrackingAppErrorsTracking 是一款专为 Android 开发者打造的 Xposed 异常捕获模块它从系统框架层全方位捕获任意应用的多进程、多用户崩溃信息连原生层堆栈都能记录下来让抓不到异常成为过去式。很多开发者都遇到过这样的难题App 明明闪退了国内 ROM 却把系统 FC 对话框直接删掉或者崩溃发生在:push、:remote这样的子进程里普通的异常监听工具要么漏报要么把崩溃张冠李戴到错误的进程上。这篇文章就带你深入 AppErrorsTracking 的核心——ProcessRecord看看它是怎么把多进程、多用户场景下的每一次崩溃都精准捕获下来的。为什么多进程与多用户场景这么难抓异常 在深入源码之前先理解两个 Android 特性带来的挑战场景说明抓异常的难点多进程一个 App 可同时运行多个进程如主进程、:push推送进程崩溃发生在哪个进程哪个进程崩溃才值得弹窗提醒多用户/工作资料同一 App 可在用户 0、用户 10工作资料等身份下各跑一个实例崩溃归属于哪个用户重新打开 App该打开哪个用户的实例Thread.UncaughtExceptionHandler这类应用层方案只能处理当前进程的异常且部分 App如 QQ自己注册了处理器后系统就再也拿不到崩溃信息。而 AppErrorsTracking 的做法是注入系统框架在系统真正处理崩溃的地方出手性能更好、覆盖更全面。核心原理ProcessRecord 是系统的进程身份证Android 的 ActivityManagerServiceAMS为每个运行中的进程维护一个ProcessRecord对象它是系统内部对进程的完整描述——相当于每个进程的身份证。AppErrorsTracking 要做的就是从这张身份证上读出所有关键信息。在框架钩子实现文件module-app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt中模块通过反射声明了多个框架类的引用第 69~88 行框架类用途com.android.server.am.AppErrors崩溃处理入口钩子就挂在它的方法上com.android.server.am.ProcessRecord进程身份证pid、userId、进程名的来源com.android.server.am.AppErrorDialog$Data崩溃对话框数据包含是否重复崩溃标志com.android.server.am.ProcessRecord$ErrorDialogControllerAPI 30 拆出为ErrorDialogController控制原生崩溃对话框的显示注意这里用了候选类名的写法新版本 Android 把PackageList、ErrorDialogController从内部类拆成了独立类模块会同时尝试两个名字保证跨版本兼容。钩住崩溃入口不同 Android 版本的两个挂点FrameworkHooker.kt的onHook()第 411 行起根据系统版本选择不同的钩子方法Android 12API 31以上钩住AppErrors.handleAppCrashLSPB第 457~459 行第一个参数就是ProcessRecord实例Android 12 以下钩住AppErrors.handleShowAppErrorUi第 476~478 行再从AppErrorDialog$Data的proc字段里取出ProcessRecord拿到实例后模块用统一的AppErrorsProcessData封装类第 102 行起对ProcessRecord做容错反射读取同一个字段在不同系统版本上名字可能不同比如进程 ID 在新旧版本上分别是mPid和pid第 139~144 行模块会依次尝试mPid → pid // 进程 ID userId // 用户 ID info // ApplicationInfo含包名 processName // 进程名 pkgList / getPkgList // 该进程承载的包列表这种多名字轮询 失败即降级的读取方式正是模块能从 Android 7.0 一路兼容到最新系统的秘诀。四个关键标志位读懂崩溃的身份 从ProcessRecord读出原始值后模块进一步推导出四个标志位AppErrorsProcessData第 182~216 行它们决定了崩溃如何处理标志位判定逻辑含义isActualApp包列表大小 1 且ApplicationInfo非空这是能直接启动的 App而非框架/共享进程isMainProcesspackageName processName崩溃发生在主进程子进程名如com.xx:push则不相等isBackgroundProcess通过UserController.getCurrentProfileIds比对当前用户崩溃发生在后台如工作资料的实例崩溃isRepeatingCrash读取AppErrorDialog$Data的repeating字段App 是否在短时间内重复崩溃这几个标志位直接驱动了界面上按钮的显隐。在崩溃对话框实现module-app/src/main/java/com/fankes/apperrorstracking/ui/activity/errors/AppErrorsDisplayActivity.kt中当packageName ! processName时对话框会额外显示一行崩溃进程名第 77、81 行让你一眼看出是子进程崩了重新打开按钮只在主进程崩溃时才出现FrameworkHooker.kt第 361~364 行因为子进程本来就不该由用户手动重启多用户崩溃连工作资料的实例都逃不掉 这是很多异常工具忽略的场景。模块从ProcessRecord的userId字段第 150~154 行识别崩溃归属的用户对话框标题带上用户身份非 0 用户的崩溃标题会显示为应用名 (用户 10)这样的形式第 329~333 行日志区分用户记录崩溃时日志会附加--user $userId和--pid $pid第 394~398 行多用户同时崩溃也不会混淆重新打开精准到用户AppErrorsDisplayActivity调用FrameworkTool.openAppUsedFramework时同时传入packageName和userId第 88 行等价于系统的--user参数确保重启的是崩溃的那个用户实例多进程策略崩溃弹窗也可以按需过滤 ️子进程推送、下载、统计等频繁崩溃每次都弹个对话框反而打扰。模块在module-app/src/main/java/com/fankes/apperrorstracking/data/ConfigData.kt中提供了两个开关配置项代码位置效果isEnableOnlyShowErrorsInFront第 167 行只在前景显示错误后台进程崩溃isBackgroundProcess true不再弹窗FrameworkHooker.kt第 371 行isEnableOnlyShowErrorsInMain第 177 行只监视主进程非主进程崩溃被过滤FrameworkHooker.kt第 373 行过滤只影响提醒方式——所有进程的崩溃数据依旧会被完整记录进异常历史随时可以回看做到不打扰与不遗漏兼得。动手实践3 步复现一个多进程崩溃 ️项目内置了演示应用可以直观看到子进程崩溃被捕获的效果1️⃣克隆仓库git clone https://gitcode.com/gh_mirrors/ap/AppErrorsTracking2️⃣查看演示应用的多进程配置demo-app/src/main/AndroidManifest.xml中注册了一个名为MultiProcessActivity的 Activity并通过android:process:multi_process指定它运行在独立子进程中。3️⃣触发子进程崩溃运行演示应用点击多进程异常按钮实现见demo-app/src/main/java/com/fankes/apperrorsdemo/ui/activity/MainActivity.kt第 46~57 行——它会启动子进程 Activity等待 600 毫秒后抛出一个错误。此时 AppErrorsTracking 弹出的对话框里会显示崩溃进程为com.fankes.apperrorsdemo:multi_process直观证明子进程的崩溃同样逃不过系统的捕获。小结这套方案好在哪 ✨系统级捕获注入AppErrors崩溃处理链路绕过 App 自定义异常处理器多进程、多用户、原生层堆栈一网打尽ProcessRecord 深度解析一次反射读取 pid、userId、进程名、包列表推导出主进程、后台、重复崩溃等关键身份人性化过滤前景/主进程双开关让开发者只关心真正重要的崩溃历史数据却完整保留对于没有电脑、无法 ADB 调试的场景AppErrorsTracking 让每一次多进程、多用户的崩溃都留下清晰的身份证这正是它给 Android 开发者带来的最佳排障体验。【免费下载链接】AppErrorsTrackingAdded more features to apps crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.项目地址: https://gitcode.com/gh_mirrors/ap/AppErrorsTracking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

C++实现高斯消元法:从原理到工业级代码的数值线性代数实践

C++实现高斯消元法:从原理到工业级代码的数值线性代数实践

1. 从“鸡兔同笼”到矩阵运算:为什么我们需要高斯消元很多朋友第一次接触线性方程组,大概都是从“鸡兔同笼”这类经典应用题开始的。设鸡有x只,兔有y只,列个二元一次方程组,用加减消元或者代入法,三两下就能…

2026/8/25 10:04:41 阅读更多 →
homoglyph进阶用法:如何自定义同形字符表,让检测能力扩展10倍

homoglyph进阶用法:如何自定义同形字符表,让检测能力扩展10倍

homoglyph进阶用法:如何自定义同形字符表,让检测能力扩展10倍 【免费下载链接】homoglyph A big list of homoglyphs and some code to detect them 项目地址: https://gitcode.com/gh_mirrors/ho/homoglyph homoglyph 是一款同形异义字符&#x…

2026/8/25 10:04:41 阅读更多 →
内存映射文件高效I/O:如何用Chronicle-Core OS.map()实现零拷贝大文件读写

内存映射文件高效I/O:如何用Chronicle-Core OS.map()实现零拷贝大文件读写

内存映射文件高效I/O:如何用Chronicle-Core OS.map()实现零拷贝大文件读写 【免费下载链接】Chronicle-Core Low level access to native memory, JVM and OS. 项目地址: https://gitcode.com/gh_mirrors/ch/Chronicle-Core Chronicle-Core 是一个提供对原生…

2026/8/25 10:03:36 阅读更多 →

最新新闻

WebSocket实时通信:从协议到实现

WebSocket实时通信:从协议到实现

TL;DR 核心要点速览 Gin框架是Go最流行的Web框架 gRPC适合内部服务,REST适合对外API JWT Token是无状态认证的标准方案 Go标准库net/http可直接构建HTTP服务 Swagger/OpenAPI可自动生成API文档 本篇是Go Web开发模块,含完整项目代码 摘要:本文详细介绍从协议到实现,涵盖核心原…

2026/8/25 12:51:13 阅读更多 →
餐饮行业为何需要独立的原材料库存管理系统?

餐饮行业为何需要独立的原材料库存管理系统?

很多餐饮老板以为收银系统自带“库存管理”就够了,实际上两者存在根本性差异: 收银系统的“库存”本质是“成品/半成品数量”——它记录的是“卖了多少份红烧肉”“还剩多少瓶可乐”,目的是前台结账和出品控制。而原材料库存管理系统管的是“…

2026/8/25 12:51:13 阅读更多 →
请求验证与统一错误处理:让API固若金汤

请求验证与统一错误处理:让API固若金汤

TL;DR 核心要点速览 Gin框架是Go最流行的Web框架 gRPC适合内部服务,REST适合对外API JWT Token是无状态认证的标准方案 Go标准库net/http可直接构建HTTP服务 Swagger/OpenAPI可自动生成API文档 本篇是Go Web开发模块,含完整项目代码 摘要:本文详细介绍让API固若金汤,涵盖核心原…

2026/8/25 12:51:13 阅读更多 →
Swagger/OpenAPI文档自动生成:告别手写API文档

Swagger/OpenAPI文档自动生成:告别手写API文档

TL;DR 核心要点速览 Gin框架是Go最流行的Web框架 gRPC适合内部服务,REST适合对外API JWT Token是无状态认证的标准方案 Go标准库net/http可直接构建HTTP服务 Swagger/OpenAPI可自动生成API文档 本篇是Go Web开发模块,含完整项目代码 摘要:本文详细介绍告别手写API文档,涵盖核心…

2026/8/25 12:51:13 阅读更多 →
Go gRPC实战(二) 服务端开发与四种服务方法

Go gRPC实战(二) 服务端开发与四种服务方法

TL;DR 核心要点速览 Gin框架是Go最流行的Web框架 gRPC适合内部服务,REST适合对外API JWT Token是无状态认证的标准方案 Go标准库net/http可直接构建HTTP服务 Swagger/OpenAPI可自动生成API文档 本篇是Go Web开发模块,含完整项目代码 摘要:本文详细介绍Go gRPC实战(二) 服务端开…

2026/8/25 12:51:12 阅读更多 →
能写的未必能过检:从AIGC检测原理倒推,论文AI工具到底该怎么选

能写的未必能过检:从AIGC检测原理倒推,论文AI工具到底该怎么选

去年这个时候,我正在实验室帮师妹改她的硕士论文初稿。她把一段自己用通用大模型生成的文献综述贴给我,句子通顺得无可挑剔,但读三段就觉得“太顺了”:每段都是先定义、再转折、最后总结,专业术语堆得很整齐&#xff0…

2026/8/25 12:50:12 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →