Android 调试桥(ADB) 是一种功能多样的命令行工具,可与设备进行通信。ADB命令可用于执行各种设备操作(例如:安装和调试应用),并提供对 Unix shell的访问权限。它是一种客户端-服务器程序,包括以下三个组件:
- 客户端:在开发计算机上运行,用于发送命令
- 守护程序(adbd):在每个设备上作为后台进程运行,用于在设备上运行命令
- 服务器:在开发计算机上作为后台进程运行,用于管理客户端与守护程序之间的通信
工作原理
当您启动某个 ADB 客户端时, 该客户端会现检查是否有 adb 服务器进程正在运行。如果没有,则启动服务器进程。服务器在启动后与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令,所有 adb 客户端均通过端口 5037 与 adb 服务器通信。
连接方式
- USB连接
- 无线连接
基本命令
查询设备
可通过如下命令查询已连接的设备列表
$ adb devices -l
List of devices attached
127.0.0.1:62001 device product:R11 model:OPPO_R11 device:shamu
adb 会针对每个设备输出以下状态信息:
- 序列号:由 adb 创建的字符串,用于通过端口号唯一标识设备
- 连接状态:可能是以下几项之一:
offline
: 设备未连接到 adb 或没有相应device
:设备已连接到 adb 服务器no device
:未连接任何设备
将命令发送至指定设备
若由多个设备在运行,您在发出 adb 命令时必须指定目标设备。如下:
$ adb devices
List of devices attached
127.0.0.1:62001 device product:R11 model:OPPO_R11 device:shamu
127.0.0.1:62002 device product:R11 model:OPPO_R11 device:shamu
$ adb -s 127.0.0.1:62001 install helloworld.apk
设置端口转发
通过 forward
命令设置任意端口转发,将特定主机端口上的请求转发到设备的其他端口。以下示例设置了主机端口 6100 到设备端口 7100的转发
adb forward tcp:6100 tcp:7100
ADB shell
发出单个命令:
adb [-s serial_number] shell shell_command
交互式 shell:
adb [-s serial_number] shell
常用命令
# 安装应用
adb install test.apk
# 卸载应用
adb uninstall cn.com.test.mobile
# 卸载app 但保留数据和缓存文件
adb uninstall -k cn.com.test.mobile
# 列出手机装的所有app 的包名
adb shell pm list packages
# 列出除了系统应用的第三方应用包名
adb shell pm list packages -3
# 清除应用数据与缓存
adb shell pm clear cn.com.test.mobile
# 启动应用
adb shell am start -ncn.com.test.mobile/.ui.SplashActivity
# 向所有组件广播 BOOT_COMPLETED (开机广播)
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
# 强制停止应用
adb shell am force-stop cn.com.test.mobile
# 查看日志
adb logcat
# 清除log 缓存
adb logcat -c
# 重启
adb reboot
# 获取序列号
adb get-serialno
# 查看Android 系统版本
adb shell getprop ro.build.version.release
# 查看占用内存前10 的app
adb shell top -s 10
# 从本地复制文件到设备
adb push <local> <remote>
# 从设备复制文件到本地
adb pull <remote> <local>
# 模拟按键,点亮屏幕
adb shell input keyevent 224
# 滑动
adb shell input swipe 300 1000 300 500
# 输入文本
adb shell input text hello
# 截图
adb shell screencap /sdcard/screen.png