简单介绍
Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-tools文件夹中,它是一个非常强大的命令行工具,通过这个工具你能够与你的android设备进行交互,被称为Android 调试桥。
它是一种客户端-服务器程序,包括以下三个组件:
- 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
- 守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
-
服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。
adb官网:https://developer.android.google.cn/studio/command-line/adb#issuingcommands
过程:
常用命令
image.png
常用命令
-
命令格式
adb [-d|-e|-s <serialNumber>] <command>
-d: 让唯一连接到该PC端的真实安卓设备执行命令,如果发现USB中连接有多部设备,将会报错
-e: 让唯一连接到该PC端的模拟器执行命令,如果发现开启了多个模拟器,将会报错
-s: 通过设备的序列号进行指定设备执行命令
如果设备只连接有一个设备或者一个模拟器的时候,可以不用声明这三个参数,adb默认会让这部唯一连接到的设备进行命令执行。 -
基础命令
adb --help
adb devices # 查看设备
devices [-l] - list all connected devices 如果您包含 `-l` 选项,`devices` 命令会告知您设备是什么。当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来
# 获取设备的状态
# 设备的状态有 3 钟,device , offline , unknown
# device:设备正常连接
# offline:连接出现异常,设备无响应
# unknown:没有连接设备
adb get-state
adb reboot # 重启 Android 设备
# 安装卸载
adb install apk的路径
adb uninstall apk的包名
# 查看应用文件列表
adb shell pm list packages
# 保存全部日志
adb logcat >电脑路径
# 保存单个apk日志
adb logcat | find ”包名“ >电脑路径
# 杀掉adb进程
adb kill-server
# 重启adb服务
adb start-server
# 电脑发文件到手机
adb push <电脑路径> <手机路径>
# 手机发文件到电脑
adb pull <手机路径> <电脑路径>
# adb forward , 将 宿主机上的某个端口重定向到设备的某个端口
adb forward tcp:1314 tcp :8888
# adb connect 远程连接 Android 设备
adb connect 192.168.1.102 #即可通过无线的方式连接手机,缺点是速度比较慢
adb shell 命令
adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下
- pm ,Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息
adb shell pm list package # adb shell pm list package
adb shell pm dump com.tencent.mobileqq # 列出指定应用的 dump 信息,里面有各种信息
pm clear # 清除应用数据
am start # 启动一个 Activity
adb shell am start -n com.android.camera/.Camera
# am monitor , 监控 crash 与 ANR
adb shell am monitor
am force-stop , 后跟包名,结束应用
am startservice , 启动一个服务
am broadcast , 发送一个广播
# input这个命令可以向 Android 设备发送按键事件
adb shell input text test123456 # 前提先将键盘设置为英文键盘
adb shell input keyevent KEYCODE_HOME # 发送按键事件
adb shell input swipe 900 500 100 500 # 发送滑动事件
# 监控app的内存变化
adb shell dumpsys meminfo 包名
# 监控app的cpu
adb shell dumpsys cpuinfo | find ”包名“
# 监控app的耗电量
adb shell dumpsys battery
# 截图命令
adb shell screencap -p /手机路径 (sdcard/screen.png)
# 录制视频
adb shell screenrecord /手机路径/XXX.MP4
monkey命令
# monkey命令
adb shell monkey –p 包名 100
# Adb shell 这个是进入android的shell环境
# Monkey 这个是调用shell里面的monkey工具 (monkey是每个手机出场自带的,我们输入指令是去唤醒它)
# -p 包名
# 100是点击的次数
adb 的工作原理
当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。
然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推
如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。
在设备上启用 adb 调试
要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。
在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到设置 > 关于手机,然后点按版本号七次。返回上一屏幕,在底部可以找到开发者选项。
在某些设备上,“开发者选项”屏幕所在的位置或名称可能有所不同。
执行 adb devices
验证设备是否已连接。如果已连接,您将看到设备名称以“设备”形式列出。
通过 WLAN 连接到设备
一般情况下,adb 通过 USB 与设备进行通信,但您也可以在通过 USB 完成一些初始设置后,通过 WLAN 使用 adb,如下所述。
- 将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络。请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持 adb 的接入点。
- 如果您要连接到 Wear OS 设备,请关闭手机上与该设备配对的蓝牙。
- 使用 USB 线将设备连接到主机。
- 设置目标设备以监听端口 5555 上的 TCP/IP 连接。
- 拔掉连接目标设备的 USB 线。
- 找到 Android 设备的 IP 地址。
- 通过 IP 地址连接到设备。
- 确认主机已连接到目标设备$ adb devices
如果 adb 连接断开:
- 确保主机仍与 Android 设备连接到同一个 WLAN 网络。
- 通过再次执行
adb connect
步骤重新连接。 - 如果上述操作未解决问题,重置 adb 主机adb kill-server
将命令发送至特定设备
如果有多个设备在运行,您在发出 adb 命令时必须指定目标设备。为此,请使用 devices
命令获取目标设备的序列号。获得序列号后,请结合使用 -s
选项与 adb 命令来指定序列号。如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL
环境变量设为包含序列号。如果您同时使用 -s
和 $ANDROID_SERIAL
,-s
会替换 $ANDROID_SERIAL
。
$ adb -s emulator-5555 install helloWorld.apk
注意:如果您在多个设备可用时发出命令但未指定目标设备,adb 会生成错误。
如果有多个可用设备,但只有一个是模拟器,请使用 -e
选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,请使用 -d
选项将命令发送至该硬件设备。
设置端口转发
使用 forward
命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机端口 6100 到设备端口 7100 的转发:
>adb forward tcp:6100 tcp:7100
将文件复制到设备/从设备复制文件
您可以使用 pull
和 push
命令将文件复制到设备或从设备复制文件。与 install
命令(仅将 APK 文件复制到特定位置)不同,使用 pull
和 push
命令可将任意目录和文件复制到设备中的任何位置。
如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:
adb pull remote local
如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:
adb push loca remote
停止 adb 服务器
adb kill-server
发出 shell 命令
您可以使用 shell
命令通过 adb 发出设备命令,也可以启动交互式 shell。如需发出单个命令,请使用 shell
命令,如下所示:
adb [-d |-e | -s shell shell_command
调用 Activity 管理器 (am
)
在 adb shell 中,您可以使用 Activity 管理器 (am
) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。在 shell 中,相应的语法为:
您也可以直接从 adb 发出 Activity 管理器命令,无需进入远程 shell。例如:
adb shell am start -a android.intent.action.VIEW
网友评论