如何使用adb shell命令检测安卓应用是否崩溃或无响应停止工作
可行的adb检测方案
方案1:直接查询系统AMS服务的ANR记录(优先推荐)
系统的ActivityManager服务会实时记录当前所有处于未处理无响应状态的应用,无历史异常误报问题,命令如下:
adb shell dumpsys activity anr | grep "你的应用包名"
只要命令有输出,即可判定应用当前处于无响应状态;无输出则状态正常。
方案2:检测应用窗口的输入响应状态
针对应用进程存活但无法响应输入的场景,可通过input服务查询窗口状态:
adb shell dumpsys input | grep -A10 "你的应用包名" | grep "unresponsive"
匹配到unresponsive: true字段即为无响应状态。
方案3:模拟轻量输入验证响应
如果需要完全贴合用户实际使用场景的验证,可以发送无副作用的输入事件后判断响应状态,先确认应用处于前台焦点:
adb shell dumpsys window windows | grep -E "mCurrentFocus|mFocusedApp" | grep "你的应用包名"
确认应用持有前台焦点的前提下,执行方案1、2命中无响应标记,即可100%判定为停止工作状态。
你之前的方案出现误报的原因是:Caused by匹配到的大多是被应用捕获的非致命异常,不会触发应用崩溃或ANR,和你要检测的「无响应」状态没有直接对应关系,所以会出现匹配成功但应用正常运行的问题。
注意:以上方案均不需要解析全量logcat,执行效率和准确率远高于原方案。
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

