adb查看服务列表

1
adb shell service list

adb查看当前运行的服务

在 Android 开发和调试中,你可以使用 adb (Android Debug Bridge) 命令结合 dumpsys 工具来查看当前系统中运行的服务。最常用和有效的方法是使用 dumpsys activity services 命令。

🔧 核心命令

1
adb shell dumpsys activity services [PACKAGE_NAME]

详细说明:

  1. 查看所有运行的服务

    1
    adb shell dumpsys activity services
    • 这个命令会输出系统中所有正在运行的 Service 的详细信息,内容非常多。
    • 输出会按包名(SERVICE 行)和进程进行分组。
    • 信息包括:服务名称、进程 ID (PID)、启动状态(started=true/false)、绑定信息(connections)、创建时间等。
  2. 查看特定应用包名下的服务

    1
    adb shell dumpsys activity services com.example.myapp
    • com.example.myapp 替换为你的目标应用包名。
    • 这会过滤输出,只显示该应用包名下的服务,信息更集中,更容易查找。
  3. 查看特定服务

    1
    adb shell dumpsys activity services com.example.myapp/.MyServiceName
    • 指定完整的组件名(包名 + 服务类名)可以精确查找某个服务。

🧩 示例输出解析

执行 adb shell dumpsys activity services com.example.myapp 后,你可能会看到类似这样的输出片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
USER 0 UID 10123 (userId=0) Running services:
User 0 active services:
* ServiceRecord{1a2b3c4d u0 com.example.myapp/.BookManagerService}
intent={cmp=com.example.myapp/.BookManagerService}
packageName=com.example.myapp
processName=com.example.myapp:remote <-- 服务运行的进程
baseDir=/data/app/~~xxx==/com.example.myapp-xxx==/base.apk
dataDir=/data/user/0/com.example.myapp
app=ProcessRecord{5f6g7h8i 12345:com.example.myapp:remote/u0a123} <-- 进程记录和 PID
createTime=-1m23s456ms lastActivityTime=-1m23s456ms
started=true <-- 关键:服务是否已启动
startRequested=true
stopIfKilled=false
callStart=true
lastStartId=1
connections: // <-- 关键:是否有组件绑定到此服务
ConnectionRecord{9j0k1l2m u0 {1n3p4q5r} -> {1a2b3c4d com.example.myapp/.BookManagerService}}
bindingCount=1
lastUnbind=null
...

关键信息解读

  • com.example.myapp/.BookManagerService: 正在运行的服务全名。
  • processName=com.example.myapp:remote: 服务运行在名为 :remote 的独立进程中(这在 AIDL 场景中很常见)。
  • started=true: 表示该服务已被 startService()bindService() 启动。
  • connections:bindingCount=1: 表示有客户端(如 Activity)通过 bindService() 成功绑定了此服务。这是验证 AIDL 服务是否被正确使用的关键指标。

🔍 其他辅助命令

虽然 dumpsys activity services 是最直接的,但以下命令有时也有用:

  1. adb shell ps | grep <package_name>:

    • 查看特定包名相关的进程。
    • 如果你的服务运行在独立进程(如 :remote),你会看到额外的进程。
    • 示例:adb shell ps -A | grep com.example.myapp
  2. adb shell dumpsys activity processes <package_name>:

    • 查看特定应用的进程信息,包括进程状态、内存等,可以间接确认服务进程是否存在。
  3. adb logcat | grep -i service:

    • 实时查看 Logcat 中与 Service 相关的日志,服务启动 (onCreate, onBind)、绑定 (Bound to)、解绑 (Unbound from) 等事件通常会有日志输出。

✅ 总结

要查看当前运行的 Service,**首选命令是 adb shell dumpsys activity services [package_name]**。

  • 使用包名过滤 (com.example.myapp) 可以快速定位目标应用的服务。
  • 重点关注输出中的 started=trueconnections (或 bindingCount) 字段,它们能明确告诉你服务是否在运行以及是否有客户端绑定。
  • 结合 ps 命令可以确认服务是否在独立进程中运行。