安装
brew install --cask android-platform-tools # adb
brew install scrcpy # 屏幕镜像 + 控制
手机端准备
进 设置 → 关于本机 连续点击「版本号」7 次,开启「开发者选项」。
回到设置 → 开发者选项,打开:
- USB 调试
- 无线调试(Android 11+,可选)
小米手机
- 设置 → 我的设备 → 「全部参数」→ 连续点击「MIUI 版本」5-8 次
- 退到 更多设置 → 出现「开发者选项」
- 打开 USB 调试 和 USB 调试(安全模式)
有线连接
USB 接 Mac,首次会弹「允许 USB 调试吗?」,勾选始终允许 → 确定。
adb devices
# List of devices attached
# xxxxxxxx device
无线 ADB
两种方式,效果一样。
方式一:USB 起步转无线(兼容所有版本)
# 1. USB 接上后,让 adb 在手机上监听 TCP 5555
adb tcpip 5555
# 2. 拔掉 USB,连 WiFi
adb connect <手机IP>:5555
# 3. 验证
adb devices
手机 IP 在 设置 → WLAN → 已连接网络详情 里看。
方式二:原生无线调试(Android 11+,免 USB)
手机端进入「无线调试」会显示 IP 地址 + 端口 + 配对码:
# 1. 配对(首次需要)
adb pair <IP>:<配对端口> # 输入屏幕上的配对码
# 2. 连接(用调试端口,通常是 5555)
adb connect <IP>:5555
# 3. 验证
adb devices
配对端口和调试端口不是同一个。配对成功后重启 / 清数据前一般不用重配。
Scrcpy:屏幕镜像 + 控制
把手机画面搬到 Mac 上,键鼠实时操控。开源免费,scrcpy 2.x 开始音视频都能传。
启动
scrcpy # 默认启动
scrcpy -s <serial> # 多设备时指定
常用选项
| 选项 | 作用 |
|---|---|
--record=foo.mkv | 录屏(含音频) |
--no-audio | 不传音频 |
--audio-source=mic | Mac 麦克风投到手机(会议场景) |
--audio-source=playback | 转发手机扬声器音频 |
--new-display | 虚拟第二屏(Android 12+) |
--otg | OTG 模式(Mac 当设备,手机当主机) |
--no-control | 只镜像不控制 |
--max-size 1024 | 限制分辨率 |
--bit-rate 8M | 限制码率 |
快捷键(macOS)
| 操作 | 快捷键 |
|---|---|
| 全屏切换 | Cmd+f |
| 1:1 窗口 | Cmd+g |
| 黑色边框裁剪 | Cmd+x |
| Home | Ctrl+h 或鼠标中键 |
| Back | Cmd+b 或鼠标右键 |
| 任务管理 | Cmd+s |
| 菜单 | Ctrl+m |
| 音量 +/- | Cmd+↑ / Cmd+↓ |
| 电源 | Cmd+p |
| 关屏(保镜像) | Cmd+o |
| 通知面板展开/折叠 | Cmd+n / Cmd+Shift+n |
| 剪贴板:手机 → Mac | Cmd+c |
| 剪贴板:Mac → 手机 | Cmd+v |
| 安装 APK | 拖入窗口 |
| 传文件到手机 | 拖入窗口 |
想用 GUI:可选 scrcpy-GUI(社区维护),给 scrcpy 加图形界面。命令行够用的话不用装。
常用 adb 命令
# 文件传输
adb push local.txt /sdcard/Download/
adb pull /sdcard/Download/remote.txt ./
# 安装 / 卸载
adb install app.apk # 安装
adb install -r app.apk # 覆盖安装(保留数据)
adb install -t test.apk # 允许 test-only APK
adb uninstall com.example.app
# 应用管理
adb shell pm list packages | grep com.example
adb shell pm clear com.example.app # 清数据
adb shell pm grant com.example.app android.permission.CAMERA # 授权限
# 截屏
adb exec-out screencap -p > screenshot.png
# 录屏(最长 3 分钟)
adb shell screenrecord /sdcard/video.mp4
# Ctrl+C 后拉回 Mac
adb pull /sdcard/video.mp4
# 模拟按键 / 输入
adb shell input keyevent KEYCODE_WAKEUP # 唤醒
adb shell input keyevent KEYCODE_SLEEP # 熄屏
adb shell input keyevent KEYCODE_HOME
adb shell input text "hello"
adb shell input tap 500 1000 # x y
adb shell input swipe 100 500 100 100 300 # x1 y1 x2 y2 duration_ms
# 启动 / 打开
adb shell am start -a android.intent.action.VIEW -d "https://example.com"
adb shell monkey -p com.example.app -c android.intent.category.LAUNCHER 1
# 当前 Activity
adb shell dumpsys activity activities | grep ResumedActivity
# 系统信息
adb shell dumpsys battery
adb shell dumpsys wifi | head -20
# logcat
adb logcat
adb logcat *:E # 只看 ERROR
adb logcat -d > log.txt # dump buffer
UI 自动化定位
adb shell uiautomator dump /sdcard/window_dump.xml
adb pull /sdcard/window_dump.xml .
XML 里每个节点的 resource-id、text、content-desc、bounds 都可作为定位依据。XPath 调试可以用 xpather.com。
常见问题
Q: adb devices 显示 unauthorized
拔数据线 → 开发者选项里「撤销 USB 调试授权」→ 重插,重新弹授权框。
Q: 无线连接断开
手机锁屏 / WiFi 切换 / 路由器省电策略都会断。adb disconnect <ip> 后重连。
Q: scrcpy 黑屏 / 音画不同步
升级到最新版本(brew upgrade scrcpy)。旧 Intel Mac 可能要加 --video-codec=h264 之类的兼容选项。