如何使用Java调用adb命令获取已启动Android应用的Activity名称
问题根因
- 参数拼写错误:
dumpsys window输出中标识前台Activity的字段是mCurrentFocus,你的代码中误写为microFocus,无法匹配到对应内容所以无输出 - 命令执行逻辑错误:
Runtime.getRuntime().exec()不支持直接执行带管道符|、换行拆分的复合命令,你拆分的多段adb命令无法被系统正确解析 - 输出读取逻辑缺失:没有等待进程执行完成,也没有处理进程的错误流,会出现进程阻塞、输出无法正常读取的情况
修复后的代码(兼容Windows环境,和你原使用的Groovy语法对齐)
// 注意Windows环境用cmd /c包裹带管道的命令,mac/Linux环境替换为["sh", "-c", "你的命令"] String[] cmd = ["cmd", "/c", "adb shell dumpsys window | find \"mCurrentFocus\""] Process res = Runtime.getRuntime().exec(cmd) // 等待进程执行完成 res.waitFor() // 读取正常输出流 def output = res.inputStream.text // 可选读取错误流排查问题 def error = res.errorStream.text if (error) { println("执行错误:" + error) } println("前台Activity信息:" + output)
执行后输出格式示例:mCurrentFocus=Window{8a3f11 u0 com.example.test/com.example.test.MainActivity},其中/后面的就是你需要的Activity完整名称。
高版本Android兼容方案
Android 10及以上版本推荐使用如下命令获取,结果更稳定,不会因为窗口焦点偏移导致匹配失败:
adb shell dumpsys activity activities | find "ResumedActivity"
内容的提问来源于stack exchange,提问作者Akshata Naik
相关产品推荐
相关产品推荐

