📢 1. 职业规划篇
📢 2.基础篇
基础篇.用 bugreport 带你看 Crash 和 ANR
📢 3. 系统应用篇
系统应用篇.解密 Partner、google PAI 机制
📢 4. 系统篇
系统篇.SystemServer 简介、自定义 Service 服务一
系统篇.SystemServer 简介、自定义 Service 服务二
系统篇.SystemServer 简介、自定义 Service 服务三
系统篇.SystemServer 简介、自定义 Service 服务四
📢 5. 性能篇
(省)低内存优化
性能篇 (省).SystemServer 与 LMK 的 socket 通信
(稳)稳定性优化
(快)开机优化
framework交流,答疑:251662478
如何通过 bugreport 分析 Android 系统日志?
在 Android 整机开发 & 系统调试 中,bugreport 是最常用的日志分析工具之一。它包含了系统运行的各种关键日志,包括 main.log、event.log、ANR、Crash 等。本文将手把手教你如何从 bugreport 中找出关键信息!🚀
📌 1. 获取 bugreport
在 Android 设备 上,使用 ADB 获取 bugreport:
adb bugreport > bugreport.zip
或者:
adb shell bugreport > bugreport.txt
如果是 Android 7.0 以上,会生成 bugreport.zip,解压后包含:
- bugreport.txt(完整日志)
- FS(文件系统信息)
- TOMBSTONES(崩溃信息)
- ANR(应用无响应日志)
📌 2. main.log(主日志)
main.log 主要记录 系统组件 & 应用的运行状态,包含: ✅ 应用启动 / 退出
✅ Service 启动 / 绑定 / 解绑
✅ Activity 生命周期(onCreate、onResume、onDestroy)
✅ 重要的系统信息 & 错误日志
🔍 关键搜索词:
am_proc_start # 进程启动
am_proc_died # 进程结束
am_activity_launch_time # Activity 启动耗时
am_crash # APP 崩溃
am_anr # APP ANR
🔍 示例:
02-05 12:45:21.123 1000 1850 1982 I am_proc_start: [0,18982,10034,com.android.settings,activity]
📌 解析: com.android.settings 进程(PID=18982)启动成功。
📌 3. event.log(系统事件日志)
event.log 主要记录 系统关键事件,例如: ✅ 应用前后台切换
✅ 屏幕解锁 / 休眠
✅ WMS(窗口管理)事件
🔍 关键搜索词:
wm_task_moved # Activity 切换
screen_toggled # 屏幕开关
🔍 示例:
02-05 13:05:33.123 1000 1850 1982 I screen_toggled: 1
📌 解析: screen_toggled: 1 表示 屏幕被点亮,0 表示 息屏。
📌 4. ANR(Application Not Responding)
ANR(应用无响应) 发生在: ✅ 主线程阻塞(耗时任务没放到子线程)
✅ 输入事件(InputDispatch)超时
✅ Service 绑定 / 解绑超时
🔍 关键搜索词:
am_anr # 查找所有 ANR 事件
🔍 示例:
02-05 14:12:45.987 1000 1850 1982 I am_anr: [12345,com.example.app,InputDispatching Timeout]
📌 解析:
- 12345 = 进程 ID
- com.example.app = 发生 ANR 的应用
- InputDispatching Timeout = 由于 主线程卡住 导致 ANR
🛠 如何分析 ANR ? 1️⃣ 搜索 "ANR in" 找到完整 ANR 堆栈日志
2️⃣ 查看 "main.log" 是否有 "InputDispatch Timeout"
3️⃣ 检查 "event.log" 看看屏幕操作记录
📌 5. Crash(应用崩溃)
Crash(崩溃) 主要由于: ✅ 空指针异常(NullPointerException)
✅ 数组越界(ArrayIndexOutOfBoundsException)
✅ ANR 之后的强制杀进程
🔍 关键搜索词:
am_crash # APP 崩溃
FATAL EXCEPTION # 关键错误
🔍 示例:
02-05 14:39:55.321 1000 1850 1982 I am_crash: [12345,1000,com.example.app,java.lang.NullPointerException,"Attempt to invoke virtual method 'java.lang.String'"]
📌 解析:
- 12345 = 进程 ID
- com.example.app = 崩溃的应用
- NullPointerException = 空指针异常
📌 6. 如何快速定位问题?
💡 快速分析思路: 1️⃣ 应用崩溃(Crash)
- 搜
am_crash找到崩溃日志 - 查看
FATAL EXCEPTION详细堆栈
2️⃣ 应用卡死(ANR)
- 搜
am_anr找到 ANR 发生时间 - 搜
InputDispatching Timeout确认是否是主线程卡住
3️⃣ 应用启动慢
- 搜
am_proc_start找到进程启动时间 - 搜
am_activity_launch_time查看 Activity 启动耗时
4️⃣ 系统 BUG / 设备异常
- 搜
system_server crash找到 SystemServer 崩溃 - 搜
tombstone查找 native 崩溃(C++ 代码问题)
💡 总结
通过 bugreport,我们可以快速分析 应用崩溃(Crash)、ANR(无响应)、系统事件(event.log) ,快速定位 Android 系统的问题。希望这篇文章能帮到你!💪🚀
📢 你在调试 bugreport 过程中遇到哪些问题?欢迎留言讨论! 😃