Android ADB 常用指令全解析

ADB(Android Debug Bridge)是 Android 开发和测试不可或缺的调试工具,它建立了电脑与 Android 设备之间的通信桥梁,通过命令行指令可实现对设备的全方位控制。掌握 ADB 指令能大幅提升开发效率,解决各类调试难题。本文系统整理了 ADB 的常用指令,按功能分类详解,包含使用场景与实战示例,助你快速成为 ADB 高手。

一、ADB 基础与环境配置

什么是 ADB?

ADB 是 Android SDK 中的一个命令行工具,全称为 Android Debug Bridge,本质是一个客户端 - 服务器程序,包含三个核心组件:

  • 客户端:运行在开发机上,负责接收用户输入的指令(如命令行输入adb命令)
  • 守护进程(daemon):以adbd进程形式运行在 Android 设备后台,负责执行客户端发送的指令
  • 服务器:运行在开发机后台的adb进程,负责管理客户端与设备守护进程的通信,协调多个客户端与设备的连接

ADB 最初由 Google 在 Android 1.0 时代推出,设计初衷是解决开发过程中 "设备 - 开发机" 交互的痛点。它基于 TCP/IP 协议实现通信,默认通过 USB 接口传输数据,也支持无线连接模式。经过十余年演进,ADB 已从简单的调试工具发展为集设备管理、应用调试、系统控制于一体的全能工具,成为 Android 开发生态中不可或缺的基础设施。

其核心价值体现在:

  • 打破应用沙箱限制,允许开发机直接操作设备底层资源
  • 提供统一的命令接口,兼容从手机到智能手表的全系列 Android 设备
  • 支持跨平台操作(Windows/macOS/Linux),保障开发环境一致性

ADB 的工作原理

ADB 的通信流程遵循典型的 C/S 架构:

1.当用户在终端输入adb命令时,客户端会向本地 ADB 服务器发送请求(默认端口 5037)

2.服务器检查是否已与目标设备建立连接,若未连接则尝试通过 USB 或网络发现设备

3.服务器将指令转发至设备上的adbd守护进程

4.守护进程执行指令并将结果通过服务器返回给客户端

5.客户端将结果显示在终端界面

这种分层架构的优势在于:

  • 支持多客户端同时连接(如同时打开多个命令行窗口操作设备)
  • 服务器自动管理设备连接状态,无需用户手动维护通信链路
  • 指令执行与结果返回的异步处理,提升复杂操作的效率

环境配置步骤

1.安装 Android SDK Platform Tools

  • 官网下载对应系统的 Platform Tools(包含 ADB 工具)
  • 解压后将路径添加到系统环境变量(Windows 的 PATH 或 macOS/Linux 的.bashrc/.zshrc)
  • 验证安装:打开终端输入adb version,显示版本信息即表示安装成功

2.设备调试模式配置

  • 开启设备 "开发者选项":连续点击系统版本号 7 次(不同品牌路径可能不同)
  • 启用 "USB 调试" 选项(Android 11 + 需额外开启 "无线调试" 权限)
  • 首次连接时,设备会弹出 "USB 调试授权" 窗口,勾选 "始终允许此计算机" 以避免重复授权

3.连接设备

  • 有线连接:用 USB 线连接设备与电脑,通过adb devices确认连接状态
  • 无线连接:需先通过 USB 配置(见后文详解),适合需要摆脱线缆束缚的场景

4.确认连接状态

复制代码
adb devices

正常情况下会显示设备序列号及状态:

  • device:连接正常,可执行指令
  • offline:设备已连接但未响应(通常需重启 ADB 或设备)
  • unauthorized:未授权调试权限(需在设备上确认授权)

ADB 的安全机制

为保护用户隐私与设备安全,ADB 采用多层次安全措施:

1.调试授权机制:首次连接新设备时必须通过设备端确认,防止未授权计算机访问设备

2.权限分级:普通 ADB 指令受限于设备用户权限,敏感操作(如修改系统文件)需 root 权限

3.无线调试加密:Android 11 + 的无线调试采用配对码验证,避免局域网内的恶意连接

4.沙箱隔离:非 root 状态下,ADB 无法直接访问其他应用的私有目录,保障数据隔离

这些机制平衡了开发便利性与设备安全性,尤其在 Android 6.0 引入运行时权限后,ADB 的权限管控更加严格,部分系统级操作需通过pm grant显式授权。

二、设备管理指令

查看设备信息

|--------------------------------------------|-----------------|-------------------------------|
| 指令 | 功能 | 示例 |
| adb devices | 列出所有连接的设备 | adb devices -l(显示详细信息) |
| adb get-serialno | 获取设备序列号 | adb -s 设备号 get-serialno(指定设备) |
| adb shell getprop ro.product.model | 查看设备型号 | - |
| adb shell getprop ro.build.version.release | 查看 Android 系统版本 | - |
| adb shell wm size | 查看屏幕分辨率 | - |
| adb shell wm density | 查看屏幕密度 | - |

实战示例

复制代码
# 查看所有设备详细信息
adb devices -l

# 查看设备型号和Android版本
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release

设备连接控制

|--------------------------|--------------|-----------------------------------|
| 指令 | 功能 | 示例 |
| adb kill-server | 停止 ADB 服务器 | - |
| adb start-server | 启动 ADB 服务器 | - |
| adb reboot | 重启设备 | adb reboot recovery(重启到恢复模式) |
| adb connect <IP:端口> | 无线连接设备 | adb connect 192.168.1.100:5555 |
| adb disconnect <IP:端口> | 断开无线连接 | adb disconnect 192.168.1.100:5555 |
| adb usb | 切换到 USB 连接模式 | - |
| adb tcpip <端口> | 切换到无线调试模式 | adb tcpip 5555 |

无线连接步骤

1.先用 USB 连接设备,设置端口:adb tcpip 5555

2.断开 USB,通过 IP 连接:adb connect 设备IP:5555(设备 IP 在 WLAN 设置中查看)

3.验证连接:adb devices

注意:设备与电脑需在同一局域网,部分设备需开启 "无线调试" 选项(Android 11+)

三、应用操作指令

应用安装与卸载

|--------------------------|------------|------------------------------------|
| 指令 | 功能 | 示例 |
| adb install <APK路径> | 安装应用 | adb install app-debug.apk |
| adb install -r <APK路径> | 覆盖安装(保留数据) | adb install -r update.apk |
| adb install -s <APK路径> | 安装到 SD 卡 | adb install -s large_app.apk |
| adb uninstall <包名> | 卸载应用 | adb uninstall com.example.myapp |
| adb uninstall -k <包名> | 卸载但保留数据 | adb uninstall -k com.example.myapp |

常用参数

  • -r:保留数据和缓存文件,用于应用更新
  • -t:允许安装测试包
  • -d:允许降级安装(低版本覆盖高版本)

实战示例

复制代码
# 覆盖安装并保留数据
adb install -r app-release.apk

# 卸载应用但保留用户数据
adb uninstall -k com.example.myapp

应用运行控制

|----------------------------------------|----------------|-------------------------------------------------------|
| 指令 | 功能 | 示例 |
| adb shell am start -n <包名/Activity名> | 启动应用组件 | adb shell am start -n com.example.myapp/.MainActivity |
| adb shell am force-stop <包名> | 强制停止应用 | adb shell am force-stop com.example.myapp |
| adb shell am kill <包名> | 杀死应用进程(系统可能重启) | adb shell am kill com.example.myapp |
| adb shell pm clear <包名> | 清除应用数据和缓存 | adb shell pm clear com.example.myapp |
| adb shell dumpsys package <包名> | 查看应用详细信息 | adb shell dumpsys package com.example.myapp |

启动指定 Activity 示例

复制代码
# 启动应用主Activity
adb shell am start -n com.example.myapp/.MainActivity

# 启动带参数的Activity
adb shell am start -n com.example.myapp/.DetailActivity -e "id" "123" -e "name" "test"

查看应用安装路径

复制代码
adb shell pm path com.example.myapp

四、文件传输指令

电脑与设备间传输文件

|----------------------------|------------|------------------------------------|
| 指令 | 功能 | 示例 |
| adb push <本地路径> <设备路径> | 从电脑发送文件到设备 | adb push ./test.txt /sdcard/ |
| adb pull <设备路径> <本地路径> | 从设备拉取文件到电脑 | adb pull /sdcard/logs ./local_logs |

路径说明

  • 设备常用路径:/sdcard/(外部存储根目录)、/data/data/<包名>/(应用私有目录)
  • 注意权限:访问/data/data/下的文件可能需要 root 权限

实战示例

复制代码
# 推送本地图片到设备相册
adb push ./photo.jpg /sdcard/DCIM/Camera/

# 拉取应用缓存文件到本地
adb pull /data/data/com.example.myapp/cache/ ./app_cache

设备内部文件操作

结合adb shell可执行设备内部的文件操作:

复制代码
# 进入设备shell环境
adb shell

# 查看目录内容
ls /sdcard/

# 创建目录
mkdir /sdcard/testdir

# 移动文件
mv /sdcard/file1.txt /sdcard/testdir/

# 复制文件
cp /sdcard/file1.txt /sdcard/testdir/file2.txt

# 删除文件
rm /sdcard/test.txt

# 查看文件内容
cat /sdcard/log.txt

# 退出shell
exit

注意:部分目录操作需要 root 权限,可通过adb root获取(仅适用于已 root 设备或模拟器)

五、调试与诊断指令

日志查看

|-------------------------------|-----------|-------------------------------------|
| 指令 | 功能 | 示例 |
| adb logcat | 查看系统日志 | - |
| adb logcat -s <标签> | 过滤指定标签的日志 | adb logcat -s MyAppTag |
| adb logcat <包名>:<级别> *:S | 过滤指定应用的日志 | adb logcat com.example.myapp:V *:S |
| adb logcat > log.txt | 将日志保存到文件 | - |
| adb logcat -c | 清除日志缓存 | - |

日志级别(从低到高):

  • V(Verbose):详细信息(默认)
  • D(Debug):调试信息
  • I(Info):普通信息
  • W(Warn):警告信息
  • E(Error):错误信息
  • F(Fatal):致命错误
  • S(Silent):无输出

实战示例

复制代码
# 只显示应用的错误日志
adb logcat com.example.myapp:E *:S

# 显示所有错误级别以上的日志并保存
adb logcat *:E > error_log.txt

进程与性能监控

|----------------------------------|---------------|---------------------------------------------|
| 指令 | 功能 | 示例 |
| adb shell ps | 查看设备进程列表 | `adb shell ps |
| adb shell top | 实时查看进程 CPU 占用 | adb shell top -m 10(显示前 10 个进程) |
| adb shell dumpsys cpuinfo | 查看 CPU 使用情况 | `adb shell dumpsys cpuinfo |
| adb shell dumpsys meminfo <包名> | 查看应用内存使用 | adb shell dumpsys meminfo com.example.myapp |
| adb shell dumpsys gfxinfo <包名> | 查看应用渲染性能 | adb shell dumpsys gfxinfo com.example.myapp |

实用技巧

  • adb shell top -d 3:每 3 秒刷新一次进程信息
  • adb shell dumpsys meminfo:不加包名可查看系统整体内存使用
  • adb shell dumpsys gfxinfo <包名> reset:重置渲染性能统计

屏幕与截图

|---------------------------------------------|-------------|--------------------------------------------|
| 指令 | 功能 | 示例 |
| adb shell screencap <路径> | 截取屏幕并保存到设备 | adb shell screencap /sdcard/screenshot.png |
| adb exec-out screencap -p > screenshot.png | 直接截取屏幕到电脑 | - |
| adb shell screenrecord <路径> | 录制屏幕视频 | adb shell screenrecord /sdcard/demo.mp4 |
| adb pull /sdcard/demo.mp4 | 将录制的视频拉取到电脑 | - |

屏幕录制参数

  • --time-limit 30:限制录制时长(默认 180 秒)
  • --bit-rate 4M:设置比特率(默认 4Mbps)
  • --size 1280x720:设置录制分辨率

示例

复制代码
# 录制60秒,比特率8Mbps的视频
adb shell screenrecord --time-limit 60 --bit-rate 8M /sdcard/gameplay.mp4

# 直接截图到电脑
adb exec-out screencap -p > current_screen.png

六、系统与高级指令

系统信息与控制

|---------------------------------|----------------|--------------------------------------|
| 指令 | 功能 | 示例 |
| adb shell getprop | 查看所有系统属性 | `adb shell getprop |
| adb shell setprop <属性名> <值> | 设置系统属性(需 root) | - |
| adb shell getevent | 查看输入事件(如按键、触摸) | - |
| adb shell input <命令> | 模拟输入事件 | adb shell input tap 500 1000(点击屏幕坐标) |
| adb shell dumpsys | 查看系统服务状态 | adb shell dumpsys battery(电池状态) |
| adb shell date <时间> | 设置系统时间(需 root) | adb shell date 20231231.235959 |

模拟输入示例

复制代码
# 点击屏幕坐标(500, 1000)
adb shell input tap 500 1000

# 滑动屏幕(从(100,500)到(900,500))
adb shell input swipe 100 500 900 500 500(持续500ms)

# 输入文本
adb shell input text "HelloADB"

# 按电源键
adb shell input keyevent KEYCODE_POWER

# 按返回键
adb shell input keyevent KEYCODE_BACK

权限与 root 相关

|-----------------------------------|-----------------|-------------------------------------------------------------------------------|
| 指令 | 功能 | 适用场景 |
| adb root | 以 root 权限重启 ADB | 已 root 设备获取高级权限 |
| adb unroot | 退出 root 权限 | 恢复普通用户模式 |
| adb shell su -c <命令> | 以 root 权限执行命令 | adb shell su -c rm /system/app/XXX |
| adb shell pm grant <包名> <权限> | 授予应用权限 | adb shell pm grant com.example.myapp android.permission.WRITE_SECURE_SETTINGS |
| adb shell pm revoke <包名> <权限> | 撤销应用权限 | adb shell pm revoke com.example.myapp android.permission.CAMERA |

注意

  • 大部分设备需要解锁 Bootloader 才能获取 root 权限
  • pm grant只能授予应用在 Manifest 中声明的权限
  • 特殊权限(如WRITE_SECURE_SETTINGS)需通过 ADB 或 root 授予

七、实用技巧与常见问题

提高效率的技巧

1.别名设置:为常用指令设置别名(如在.bashrc 中):

复制代码
alias adbip='adb connect 192.168.1.100:5555'
alias adbl='adb logcat -s MyApp'
alias adbs='adb shell'

2.多设备操作:当连接多个设备时,用-s指定设备:

复制代码
adb -s 192.168.1.100:5555 install app.apk
adb -s emulator-5554 shell

3.命令组合:结合管道符实现复杂功能:

复制代码
# 查找应用进程并杀死
adb shell ps | grep com.example.myapp | awk '{print $2}' | xargs adb shell kill

4.ADB 路径自动补全:配置 bash 自动补全脚本,支持指令和路径补全

常见问题解决

1.设备连接失败(offline 状态)

  • 解决方案:重启 ADB 服务器(adb kill-server && adb start-server)
  • 重新插拔 USB 线或重启设备

2.无权限访问设备(no permissions)

  • Windows:在设备上授权 USB 调试
  • Linux/macOS:执行sudo chmod 777 /dev/bus/usb/<设备路径>(路径可通过lsusb查看)

3.应用安装失败(INSTALL_FAILED_XXX)

  • INSTALL_FAILED_INSUFFICIENT_STORAGE:设备存储空间不足
  • INSTALL_FAILED_VERIFICATION_FAILURE:关闭 "验证应用" 选项
  • INSTALL_FAILED_UPDATE_INCOMPATIBLE:先卸载旧版本再安装

4.无线连接超时

  • 确保设备与电脑在同一网络
  • 检查防火墙设置,允许 5555 端口通信
  • 尝试重启设备的网络或 ADB 服务

八、总结

ADB 是 Android 开发的瑞士军刀,掌握这些指令能显著提升日常开发和调试效率。本文涵盖了设备管理、应用操作、文件传输、调试诊断等核心场景的常用指令,建议初学者从基础指令开始练习,逐步掌握高级用法。

实际使用中,不必死记硬背所有指令,可将本文作为速查表随时查阅。随着使用频率增加,自然会熟练掌握常用命令。ADB 的强大之处在于其灵活性,通过组合不同指令,能解决几乎所有设备交互问题,是每个 Android 开发者必备的技能。

相关推荐
z9209810234 分钟前
安卓16 手机系统 super 分区挂载读写 解锁安卓动态分区RW 逻辑分区读写 自由读写 修改分区system vendor、product
android·智能手机·安卓动态分区·解锁动态分区·分区挂载读写
风酥糖6 分钟前
Android上部署Linux环境的方案总结对比
android·linux·运维
行思理6 分钟前
mac终端下生成android 证书
android·macos
今夕资源网8 分钟前
LANDrop 跨平台局域网文件传输工具 支持 iOS、Android、macOS、Windows、Linux、Android TV 等操作系统
android·linux·macos·跨平台·文件传输·局域网文件共享·局域网文件传输
|华|8 小时前
Mysql故障排查与生产环境优化
adb
BduL OWED11 小时前
mysql的主从配置
android·mysql·adb
人需要PID11 小时前
【卡尔曼工具箱-EKF-MATLAB应用】
android
亘元有量-流量变现13 小时前
APP自动识别跳转各大应用商店(鸿蒙+iOS+安卓全品牌)|可直接部署落地页源码
android·ios·harmonyos
ForteScarlet17 小时前
从 Kotlin 编译器 API 的变化开始: 2.3.20
android·开发语言·后端·ios·开源·kotlin