You need to enable JavaScript to run this app. 如何使用Java调用adb命令获取已启动Android应用的Activity名称
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:18:01