# ADB 常用命令指南

## 目录
- [设备连接管理](#设备连接管理)
- [应用安装与卸载](#应用安装与卸载)
- [文件传输](#文件传输)
- [日志查看](#日志查看)
- [系统操作](#系统操作)
- [Activity Manager (am) 命令](#activity-manager-am-命令)
- [Package Manager (pm) 命令](#package-manager-pm-命令)
- [Input 输入命令](#input-输入命令)
- [屏幕操作](#屏幕操作)
- [系统信息查询](#系统信息查询)
- [网络操作](#网络操作)
- [Monkey 压力测试](#monkey-压力测试)
- [高级调试技巧](#高级调试技巧)

---

## 设备连接管理

### 查看设备列表
```bash
adb devices
```
- 显示所有已连接的Android设备
- 多行显示表示连接多个设备
- 每行前面的字符串表示设备的SN号（序列号）

### 获取设备状态
```bash
adb get-state
```
- 返回设备状态：`device`（已连接）、`offline`（离线）、`unknown`（未知）

### 启动/关闭 ADB 服务
```bash
adb start-server    # 启动adb服务
adb kill-server     # 关闭adb服务
```

### 连接/断开设备
```bash
adb connect <设备IP地址>     # 通过WiFi连接设备（需在同一局域网）
adb disconnect              # 断开当前设备连接
adb disconnect <设备IP地址>  # 断开指定设备
```

### WiFi 连接设置
```bash
# 1. 使用USB连接设备
adb tcpip 5555

# 2. 断开USB，使用WiFi连接
adb connect <设备IP地址>:5555

# 如果WiFi连接失败，在设备上执行：
adb shell setprop service.adb.tcp.port 5555
adb shell stop adbd
adb shell start adbd
```

---

## 应用安装与卸载

### 安装应用
```bash
adb install <apk文件路径>           # 安装APK
adb install -r <apk文件路径>       # 重新安装（覆盖已安装版本）
adb install -s <设备SN> <apk路径>   # 指定设备安装（多设备时）
adb install -d <apk文件路径>        # 允许降级安装
adb install -g <apk文件路径>        # 授予所有运行时权限
```

**示例：**
```bash
adb install D:/hello.apk
# 注意：cmd路径不要包含中文，否则可能安装失败
```

### 卸载应用
```bash
adb uninstall <包名>        # 卸载应用
adb uninstall -k <包名>    # 卸载应用但保留数据和缓存
```

**示例：**
```bash
adb uninstall com.example.app
adb uninstall -k com.example.app
```

---

## 文件传输

### 推送文件到设备
```bash
adb push <本地文件路径> <设备路径>
```

**示例：**
```bash
adb push D:/hello.apk /sdcard/hello.apk
adb push D:/test.txt /sdcard/Download/test.txt
```

### 从设备拉取文件
```bash
adb pull <设备路径> <本地保存路径>
```

**示例：**
```bash
adb pull /sdcard/screen.png D:/screenshots/
adb pull /sdcard/Download/file.txt ./
```

---

## 日志查看

### 基本日志查看
```bash
adb logcat                    # 查看所有日志
adb logcat -c                 # 清空日志缓冲区
adb logcat -v time            # 显示时间戳
adb logcat -v threadtime      # 显示线程和时间
adb logcat -v long            # 详细格式
```

### 过滤日志
```bash
# 按标签过滤
adb logcat -s TAG1 TAG2

# 按优先级过滤（V/D/I/W/E/F/S）
adb logcat *:E                # 只显示错误级别
adb logcat *:W                # 显示警告及以上

# 组合过滤
adb logcat -s TAG:*:E         # 特定标签的错误日志

# 使用管道过滤（Windows）
adb logcat | findstr "关键字"
adb logcat | findstr /i "error"

# 使用管道过滤（Linux/Mac）
adb logcat | grep "关键字"
adb logcat | grep -i "error"
```

### 保存日志到文件
```bash
adb logcat > log.txt                          # 保存所有日志
adb logcat -v time > log.txt                  # 保存带时间戳的日志
adb logcat -s TAG:*:E > error_log.txt         # 保存过滤后的日志
adb logcat -d > log.txt                       # 一次性获取当前日志并退出
```

### 按时间过滤日志
```bash
adb logcat -t 100              # 显示最后100行
adb logcat -t '01-01 12:00:00.000'  # 显示指定时间之后的日志
```

---

## 系统操作

### 重启设备
```bash
adb reboot                     # 普通重启
adb reboot recovery            # 重启到Recovery模式
adb reboot bootloader          # 重启到Bootloader模式
adb reboot -p                  # 关机（部分设备支持）
```

### 重新挂载系统分区
```bash
adb remount                    # 重新挂载系统分区为可写（需要root）
adb root                       # 以root权限重启adb
```

### 进入Shell
```bash
adb shell                      # 进入设备Shell
adb shell <命令>              # 直接执行Shell命令
```

**示例：**
```bash
adb shell ls /sdcard
adb shell cat /proc/cpuinfo
```

---

## Activity Manager (am) 命令

### 启动Activity
```bash
# 基本启动
adb shell am start -n <包名>/<Activity类名>

# 先停止再启动
adb shell am start -S -n <包名>/<Activity类名>

# 等待启动完成
adb shell am start -W -n <包名>/<Activity类名>

# 启动并传递数据
adb shell am start -a <action> -d <data> -t <type>
```

**示例：**
```bash
# 启动主Activity
adb shell am start -n com.example.app/.MainActivity

# 拨打电话
adb shell am start -a android.intent.action.CALL -d tel:10086

# 打开网页
adb shell am start -a android.intent.action.VIEW -d "https://www.baidu.com"

# 打开应用市场
adb shell am start -a android.intent.action.VIEW -d "market://details?id=com.example.app"
```

### 启动Service
```bash
adb shell am startservice -n <包名>/<Service类名>
```

### 发送广播
```bash
adb shell am broadcast -a <action>
```

**示例：**
```bash
# 发送开机广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
```

### 监控Activity启动
```bash
adb shell am monitor           # 监控应用启动和崩溃
```

### 强制停止应用
```bash
adb shell am force-stop <包名>
```

### 获取当前Activity
```bash
# Windows
adb shell dumpsys activity | findstr "mFocus"

# Linux/Mac
adb shell dumpsys activity | grep "mFocus"

# 更精确的方式
adb shell dumpsys window windows | findstr "mCurrentFocus"
```

### 获取Activity栈信息
```bash
adb shell dumpsys activity activities
```

---

## Package Manager (pm) 命令

### 列出应用
```bash
adb shell pm list packages              # 列出所有应用包名
adb shell pm list packages -3           # 只列出第三方应用
adb shell pm list packages -s            # 只列出系统应用
adb shell pm list packages -u            # 列出已卸载的应用
adb shell pm list packages -f            # 显示应用关联的apk文件
adb shell pm list packages -i            # 显示应用的安装器
```

### 应用信息查询
```bash
adb shell pm dump <包名>                # 显示应用详细信息
adb shell pm path <包名>                # 显示应用APK路径
adb shell pm list packages -f <包名>    # 显示应用APK路径（另一种方式）
```

**示例：**
```bash
adb shell pm dump com.example.app
adb shell pm path com.example.app
# 输出：package:/data/app/com.example.app-xxx/base.apk
```

### 安装/卸载（设备端）
```bash
adb shell pm install <apk路径>          # 在设备上安装APK
adb shell pm uninstall <包名>           # 在设备上卸载应用
```

### 清除应用数据
```bash
adb shell pm clear <包名>               # 清除应用数据和缓存
```

### 启用/禁用应用
```bash
adb shell pm disable-user <包名>        # 禁用应用（需要root）
adb shell pm enable <包名>              # 启用应用（需要root）
```

**示例：**
```bash
adb shell pm disable-user com.android.launcher3
adb shell pm enable com.android.launcher3
```

---

## Input 输入命令

### 文本输入
```bash
adb shell input text "文本内容"
```

**示例：**
```bash
adb shell input text "aimomo"
adb shell input text "www.baidu.com"
```

**注意：** 不支持中文输入，空格需要用 `%s` 表示

### 点击操作
```bash
adb shell input tap <x坐标> <y坐标>
```

**示例：**
```bash
adb shell input tap 300 700
```

### 按键事件
```bash
adb shell input keyevent <键码>
```

**常用键码：**
```bash
adb shell input keyevent KEYCODE_HOME      # Home键
adb shell input keyevent KEYCODE_BACK      # 返回键
adb shell input keyevent KEYCODE_MENU      # 菜单键
adb shell input keyevent KEYCODE_VOLUME_UP # 音量+
adb shell input keyevent KEYCODE_VOLUME_DOWN # 音量-
adb shell input keyevent KEYCODE_POWER     # 电源键
adb shell input keyevent KEYCODE_ENTER     # 回车键
adb shell input keyevent KEYCODE_DEL      # 删除键

# 使用数字键码
adb shell input keyevent 3    # Home键
adb shell input keyevent 4    # 返回键
adb shell input keyevent 24   # 音量+
adb shell input keyevent 25   # 音量-
adb shell input keyevent 26   # 电源键
```

### 滑动操作
```bash
adb shell input swipe <x1> <y1> <x2> <y2> [持续时间(ms)]
```

**示例：**
```bash
# 从(300, 500)滑动到(300, 900)
adb shell input swipe 300 500 300 900

# 快速滑动（100ms）
adb shell input swipe 300 500 300 900 100

# 模拟长按（500ms）
adb shell input swipe 300 500 300 500 500
```

### 长按操作
```bash
adb shell input swipe <x> <y> <x> <y> 500
```

---

## 屏幕操作

### 截图
```bash
adb shell screencap <保存路径>
```

**示例：**
```bash
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png ./
```

### 录屏
```bash
adb shell screenrecord <保存路径> [选项]
```

**选项：**
- `--time-limit <秒>`: 限制录制时间（默认180秒）
- `--size <宽x高>`: 设置分辨率
- `--bit-rate <比特率>`: 设置比特率（默认4Mbps）

**示例：**
```bash
# 录制10秒视频
adb shell screenrecord --time-limit 10 /sdcard/video.mp4

# 设置分辨率
adb shell screenrecord --size 1280x720 /sdcard/video.mp4

# 停止录制：Ctrl+C 或执行时间限制
```

### 查看屏幕分辨率
```bash
adb shell wm size
adb shell wm size <宽x高>        # 设置分辨率（需要root）
```

### 隐藏状态栏和导航栏
```bash
# 完全沉浸式（隐藏状态栏和导航栏）
adb shell settings put global policy_control immersive.full=*

# 仅隐藏状态栏
adb shell settings put global policy_control immersive.status=*

# 仅隐藏导航栏
adb shell settings put global policy_control immersive.navigation=*

# 恢复显示
adb shell settings put global policy_control null

# 完全隐藏（另一种方式）
adb shell wm overscan 0,0,0,0
```

---

## 系统信息查询

### 查看系统属性
```bash
adb shell getprop                    # 查看所有系统属性
adb shell getprop <属性名>           # 查看特定属性
```

**常用属性：**
```bash
adb shell getprop ro.build.version.sdk        # API版本
adb shell getprop ro.build.version.release    # Android版本
adb shell getprop ro.product.model            # 设备型号
adb shell getprop ro.product.manufacturer     # 制造商
adb shell getprop ro.serialno                 # 序列号
```

### 查看CPU信息
```bash
adb shell cat /proc/cpuinfo
adb shell dumpsys cpuinfo
```

### 查看内存信息
```bash
adb shell cat /proc/meminfo
adb shell dumpsys meminfo
adb shell dumpsys meminfo <包名>     # 查看特定应用内存
```

### 查看存储信息
```bash
adb shell df                          # 查看存储空间
adb shell df -h                       # 人类可读格式
```

### 查看电量信息
```bash
adb shell dumpsys battery
```

### 查看网络信息
```bash
# 查看MAC地址
adb shell cat /sys/class/net/wlan0/address

# 查看IP地址
adb shell ip addr show wlan0
adb shell ifconfig wlan0
```

### 查看设备信息
```bash
adb shell getprop ro.build.version.sdk    # SDK版本
adb shell getprop ro.build.version.release # Android版本
adb shell getprop ro.product.model        # 设备型号
adb shell getprop ro.product.brand        # 品牌
adb shell getprop ro.product.manufacturer # 制造商
```

### 查看可用命令
```bash
adb shell ls /system/bin                 # 查看系统命令
adb shell which <命令名>                 # 查找命令路径
```

---

## 网络操作

### WiFi控制
```bash
adb shell svc wifi enable                # 打开WiFi
adb shell svc wifi disable               # 关闭WiFi
```

### 移动网络控制
```bash
adb shell svc data enable                # 打开移动数据
adb shell svc data disable               # 关闭移动数据
```

### 查看WiFi密码（需要root）
```bash
adb shell cat /data/misc/wifi/*.conf
```

---

## Monkey 压力测试

### 基本Monkey测试
```bash
adb shell monkey -p <包名> -v <事件数>
```

**示例：**
```bash
# 单应用100个随机事件
adb shell monkey -p com.example.app -v 100

# 多应用测试
adb shell monkey -p com.app1 -p com.app2 -v -v 100
```

### 完整Monkey测试命令
```bash
adb shell monkey -p <包名> \
  --throttle 100 \                      # 事件间隔100ms
  --ignore-crashes \                    # 忽略崩溃
  --ignore-timeouts \                   # 忽略超时
  --ignore-security-exceptions \        # 忽略安全异常
  --ignore-native-crashes \            # 忽略Native崩溃
  --monitor-native-crashes \           # 监控Native崩溃
  -v -v -v \                           # 详细日志（3级）
  -s <种子值> \                        # 设置随机种子
  <事件数>
```

**示例：**
```bash
adb shell monkey -p com.example.app \
  --throttle 100 \
  --ignore-crashes \
  --ignore-timeouts \
  --ignore-security-exceptions \
  --ignore-native-crashes \
  --monitor-native-crashes \
  -v -v -v \
  -s 1540475754297 \
  1000
```

### Monkey测试选项说明
- `-p <包名>`: 指定测试的应用包名
- `-v`: 日志详细程度（可叠加，最多3个）
- `--throttle <毫秒>`: 事件之间的延迟
- `--ignore-crashes`: 忽略应用崩溃，继续测试
- `--ignore-timeouts`: 忽略ANR，继续测试
- `--ignore-security-exceptions`: 忽略权限异常
- `-s <种子值>`: 设置随机种子，可重现测试序列
- `--pct-touch <百分比>`: 触摸事件百分比
- `--pct-motion <百分比>`: 滑动事件百分比
- `--pct-trackball <百分比>`: 轨迹球事件百分比
- `--pct-nav <百分比>`: 导航事件百分比
- `--pct-syskeys <百分比>`: 系统按键事件百分比

---

## 高级调试技巧

### 查看内核日志
```bash
adb shell dmesg                        # 查看内核调试信息
adb shell dmesg | tail -100            # 查看最后100行
```

### 文件系统操作
```bash
# 创建目录
adb shell mkdir /sdcard/test

# 查看文件
adb shell cat <文件路径>
adb shell ls -l <目录路径>

# 删除文件
adb shell rm <文件路径>

# 复制文件
adb shell cp <源路径> <目标路径>

# 移动文件
adb shell mv <源路径> <目标路径>
```

### 权限管理
```bash
# 当root权限后仍提示只读时
adb root
adb remount
adb shell mount -o remount,rw /
```

### 查看系统服务
```bash
adb shell service list                  # 列出所有服务
adb shell dumpsys <服务名>             # 查看服务信息
```

**常用服务：**
```bash
adb shell dumpsys activity              # Activity信息
adb shell dumpsys window                # 窗口信息
adb shell dumpsys meminfo               # 内存信息
adb shell dumpsys battery              # 电池信息
adb shell dumpsys cpuinfo              # CPU信息
adb shell dumpsys package              # 包信息
adb shell dumpsys connectivity          # 网络连接信息
```

### 性能监控
```bash
# 查看CPU使用率
adb shell top
adb shell top -n 1                     # 只显示一次

# 查看特定进程
adb shell top | grep <进程名>

# 查看网络统计
adb shell cat /proc/net/dev
```

### 应用调试
```bash
# 查看应用进程
adb shell ps | grep <包名>

# 查看应用UID
adb shell dumpsys package <包名> | grep userId

# 查看应用权限
adb shell dumpsys package <包名> | grep permission
```

### 快速操作组合
```bash
# 一键截图并拉取
adb shell screencap /sdcard/screen.png && adb pull /sdcard/screen.png ./

# 一键清理日志并开始记录
adb logcat -c && adb logcat > log.txt

# 一键安装并启动
adb install app.apk && adb shell am start -n com.example.app/.MainActivity
```

---

## 常用命令速查表

| 功能 | 命令 |
|------|------|
| 查看设备 | `adb devices` |
| 安装应用 | `adb install -r app.apk` |
| 卸载应用 | `adb uninstall <包名>` |
| 查看日志 | `adb logcat` |
| 过滤日志 | `adb logcat \| grep "关键字"` |
| 截图 | `adb shell screencap /sdcard/screen.png` |
| 录屏 | `adb shell screenrecord /sdcard/video.mp4` |
| 启动应用 | `adb shell am start -n <包名>/<Activity>` |
| 停止应用 | `adb shell am force-stop <包名>` |
| 查看当前Activity | `adb shell dumpsys activity \| grep mFocus` |
| 查看包列表 | `adb shell pm list packages -3` |
| 清除数据 | `adb shell pm clear <包名>` |
| 点击屏幕 | `adb shell input tap x y` |
| 输入文本 | `adb shell input text "内容"` |
| 滑动 | `adb shell input swipe x1 y1 x2 y2` |
| 按键 | `adb shell input keyevent KEYCODE_HOME` |
| 重启 | `adb reboot` |
| 查看系统版本 | `adb shell getprop ro.build.version.release` |
| 查看SDK版本 | `adb shell getprop ro.build.version.sdk` |

---

## 注意事项

1. **路径问题**：Windows下路径不要包含中文，否则可能失败
2. **权限问题**：部分命令需要root权限（如`adb remount`、`pm disable`）
3. **多设备连接**：使用`-s <设备SN>`指定设备
4. **WiFi连接**：需要设备与电脑在同一局域网
5. **日志过滤**：Windows使用`findstr`，Linux/Mac使用`grep`
6. **Monkey测试**：建议在测试设备上运行，避免影响正常使用

---

## 参考资源

- [Android官方ADB文档](https://developer.android.com/studio/command-line/adb)
- [ADB命令完整参考](https://developer.android.com/studio/command-line/adb#direct)
- [Monkey测试文档](https://developer.android.com/studio/test/monkey)

---

*最后更新：2024年*
