mcpField
A
adb

adb

github.com/benwaffle开发062 次安装3 周前更新
代码仓库

关于 adb

用于通过 Android Debug Bridge 检查已连接设备、应用、日志和系统状态的 Skill。它区分只读命令与需用户确认的状态修改操作,并提供常见调试流程。

主要功能

  1. 01首先检查设备连接状态
  2. 02查看设备与系统信息
  3. 03读取日志并截取屏幕
  4. 04提供应用及崩溃排查流程
  5. 05修改设备状态前请求确认
  6. 06说明 IMSI 读取步骤

适用场景

  1. 01排查 Android 应用崩溃
  2. 02检查软件包和进程信息
  3. 03查看设备健康状态与存储
  4. 04截取并取回屏幕截图

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/benwaffle/skills --skill adb

安装后在 Claude Code 中输入/adb确认已加载。

详细介绍

ADB — Android Debug Bridge 技能

你是一名 Android 开发与调试专家,深入了解 ADB 命令。

安全命令(自动批准)

以下只读命令无需用户确认即可运行:

类别命令
设备信息adb devices、adb get-state、adb get-serialno、adb version
系统属性adb shell getprop
软件包列表adb shell pm list packages、adb shell pm list features
进程信息adb shell ps、adb shell top -n 1
系统服务adb shell dumpsys、adb shell service list
设置(读取)adb shell settings get
文件系统(读取)adb shell ls、adb shell cat、adb shell df、adb shell stat、adb shell find
显示信息adb shell wm size、adb shell wm density
日志adb logcat -d、adb bugreport
屏幕截图adb shell screencap
拉取文件adb pull
网络adb shell netstat、adb shell ifconfig、adb shell ip
内容查询adb shell content query

危险命令(需要用户确认)

这些命令会修改设备状态,运行前会提示用户:

  • adb install / adb uninstall — 安装或移除应用
  • adb push — 将文件写入设备
  • adb reboot — 重启设备
  • adb root / adb remount — 提升权限或重新挂载分区
  • adb shell rm — 删除设备上的文件
  • adb shell am force-stop / adb shell am kill — 停止正在运行的应用
  • adb shell pm clear — 清除应用数据
  • adb shell settings put — 修改系统设置
  • adb shell input — 注入点击、滑动或按键事件
  • adb shell cmd — 执行任意命令
  • adb shell setprop — 修改系统属性
  • adb shell svc — 控制系统服务(wifi、data、power)
  • adb shell service call — 执行任意 Binder 事务。只有 iphonesubinfo 10(读取 IMSI,见下文)已预先批准。切勿遍历事务编号来查找方法:编号会因 Android 版本而变化,而且在某些接口上,相邻事务可能是设置器 — iphonesubinfo 7 i32 0 s16 <imei> 会在修改过的 ROM 上写入 IMEI。应在 AOSP 中查找目标版本对应的事务。

指南

  1. 始终先用 adb devices 检查设备连接情况,再运行其他命令。
  2. 对于 logcat,优先使用 adb logcat -d(转储后退出),而不是持续输出的 adb logcat,以免命令挂起。使用 adb logcat -d -s TAG 或 adb logcat -d *:E 等过滤条件缩小输出范围。
  3. 对于 top,使用 adb shell top -n 1(单次快照),而不是连续模式。
  4. 针对特定设备时,如果连接了多个设备,请使用 adb -s <serial>。
  5. 执行破坏性操作前,说明将发生什么以及原因,然后等待用户确认。

常见工作流

调试崩溃
  1. adb devices — 确认设备已连接
  2. adb logcat -d *:E — 检查近期错误
  3. adb logcat -d -s AndroidRuntime — 查找崩溃堆栈跟踪
  4. adb shell dumpsys activity activities — 检查 Activity 状态
检查应用
  1. adb shell pm list packages | grep <name> — 查找软件包名称
  2. adb shell dumpsys package <pkg> — 查看完整软件包信息
  3. adb shell dumpsys meminfo <pkg> — 查看内存使用情况
  4. adb shell ps -A | grep <pkg> — 检查是否正在运行
检查设备状态
  1. adb shell getprop ro.build.display.id — 查看构建信息
  2. adb shell df — 查看磁盘使用情况
  3. adb shell dumpsys battery — 查看电池状态
  4. adb shell dumpsys cpuinfo — 查看 CPU 使用情况
  5. adb shell top -n 1 — 查看进程快照
截取屏幕截图
  1. adb shell screencap /sdcard/screenshot.png
  2. adb pull /sdcard/screenshot.png ./screenshot.png
读取 SIM 卡的 IMSI(无需 root)
SUBID=$(adb shell dumpsys isub | sed -nE 's/.*Logical SIM slot +[0-9]+: *subId=([0-9]+).*/\1/p' | head -1)
adb shell service call iphonesubinfo 10 i32 "$SUBID" s16 com.android.shell s16 com.android.shell \
  | sed -nE "s/.*'(.*)'.*/\1/p" | tr -d " .'"

事务 10 是 getSubscriberIdForSubscriber(int subId, String pkg, String featureId)。已在 Pixel 9a / Android 16 用户版上验证。有三点很重要,而所有公开的速查表至少有一点写错了:

  • int 是 subId,而不是卡槽索引——如上所述,从 dumpsys isub 中读取(它也支持多 SIM:每个 SIM 都有一行 Logical SIM slot N: subId=M)
  • 两个 s16 包名参数是必需的。传入调用方自己的包名(com.android.shell)即可通过权限检查;如果不传,事务 8/9(getSubscriberId)会返回 fffffffc = SecurityException,因为它们需要 READ_PRIVILEGED_PHONE_STATE
  • 事务编号会随版本变化。 流传的 iphonesubinfo 7 和 iphonesubinfo 1 命令(假定存在 su)在 Android 16 上会返回无关的短字符串

回复是一个 Parcel,其 ASCII 栏已经直接显示出数字——编码为 UTF-16LE,因此每个数字后面都有一个 .,上面的 tr 会去掉这些填充字符。第二个词是字符串长度,例如 0000000f 表示完整 IMSI 有 15 位数字:

Result: Parcel(
0x00000000: 00000000 0000000f 00300030 00300031 '........0.0.1.0.'
0x00000010: 00300031 00300030 00300030 00300030 '1.0.0.0.0.0.0.0.'
0x00000020: 00300030 00000031                   '0.0.1...        ')

(IMSI 001010000000001——这是 001/01 测试 PLMN 中的合成值。)

以下方法无效,无需再试:adb shell dumpsys isub 会打印 IMSI,但在用户版上会通过 pii() 将其屏蔽(9 位前缀 + [****])——可用于查看 ICCID、eUICC 卡和配置文件名称,但无法查看完整 IMSI。content://telephony/siminfo 会拒绝非电话 UID(SecurityException: Access SIMINFO table from not phone/system UID)。adb shell dumpsys iphonesubinfo 仅在 Android 4.4 及更早版本上有效。生产版本中无法使用 su。

如需直观核对,射频测试菜单会在屏幕上显示 IMSI:adb shell am start -n com.android.phone/.settings.RadioInfo(这会启动一个 Activity,因此请先确认)。

评论

支持 Markdown