adb详细介绍
#1. 基本简介
adb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具
#2. Mac上安装adb
安装brew
ruby -e “$(curl –insecure -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”.
安装adb
brew install Caskroom/cask/android-platform-tools
测试是否安装成功, 打开手机开发者模式, 打开USB调式和安装功能
adb devices
第一次执行会提示没有启动, 会自动启动
Jackeys-MacBook-Pro:~ jackey$ adb devices List of devices attached * daemon not running; starting now at tcp:5037 * daemon started successfully
再执行一次
Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
这次没有提示错误, 但没有列出手机。是因为没有开启手机开发者模式和USB调试安装功能
我们打开后再试一次, 这次就能看到有列出我们的设备了, device前面一段就是我们的设备的serialNumber
Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211 device
#3. 设备连接管理
1) USB连接
通过 USB 连接来正常使用 adb 需要保证几点:
-
硬件状态正常。
包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。
-
Android 设备的开发者选项和 USB 调试模式已开启。
可以到「设置」-「开发者选项」-「Android 调试」查看。
如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。
-
设备驱动状态正常。
这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。
-
通过 USB 线连接好电脑和设备后确认状态。
如果能看到
说明连接成功.
2) 无线连接(需借助USB线)
除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!
操作步骤:
-
将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
-
将设备与电脑通过 USB 线连接。
应确保连接成功(可运行
adb devices
看是否能列出该设备)。 -
让设备在 5555 端口监听 TCP/IP 连接:
adb tcpip 5555
-
断开 USB 连接。
-
找到设备的 IP 地址。
一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文提到的获取设备IP的方法用 adb 命令来查看。
-
通过 IP 地址连接设备。
adb connect <device-ip-address>:<port>
这里的
<device-ip-address>
就是上一步中找到的设备 IP 地址, <port>就是上面设置的5555端口。 -
拔掉USB线, 确认连接状态。
adb devices
-
如果能看到
Jackeys-MacBook-Pro:xiaoailite jackey$ adb devices List of devices attached 192.168.1.10:5555 device
说明连接成功。
如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address>:<port>
那一步;
如果还是不行的话,通过 adb kill-server
重新启动 adb 然后从头再来一次试试。
断开无线连接命令:
adb disconnect <device-ip-address>
#4. 常用指令
1) 启动
adb start-server
2) 停止
adb kill-server
3) 查看adb版本
adb version
4) 查看已连接的设备
adb devices
输出:
Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211 device
输出格式为[serialNumber][state], 其中state有如下几种:
- offline - 表示设备未连接成功或无响应
- device - 设备已连接. 需要注意这个状态并不标识Android系统以及完全启动和可操作, 在设备启动过程中设备实例就可连接到adb, 但启动完毕后系统才处于可操作状态
- no device - 没有设备/模拟器连接
5) 为命令指定目标设备
adb [-d|-e|-s <serialNumber>] <command>
在多个设备/模拟器连接的情况下较常用的是 -s <serialNumber>
参数,serialNumber 可以通过 adb devices
命令获取
6) 指定adb server的网络端口
adb -P <port> start-server
默认端口是5037
7) 获取设备的IP
adb shell ifconfig | grep Mask
8)查看应用列表
adb shell pm list packages
在 adb shell pm list packages
的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:
9) 安装APK
adb install [-lrtsdg] <path_to_apk>
[100%] /data/local/tmp/1.apk pkg: /data/local/tmp/1.apk Success
10)卸载应用
adb uninstall [-k] <packagename>
<packagename>
表示应用的包名,-k
参数可选,表示卸载应用但保留数据和缓存目录。
示例:
adb uninstall com.qihoo360.mobilesafe
11)清除应用数据与缓存
adb shell pm clear <packagename>
<packagename>
表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。
示例:
adb shell pm clear com.qihoo360.mobilesafe
12)查看前台Activity
adb shell dumpsys activity activities | grep mFocusedActivity
13) 查看正在运行的Services
adb shell dumpsys activity services [<packagename>]
<packagename>
参数不是必须的,指定 <packagename>
表示查看与某个包名相关的 Services,不指定表示查看所有 Services。
<packagename>
不一定要给出完整的包名,比如运行 adb shell dumpsys activity services org.mazhuang
,那么包名 org.mazhuang.demo1
、org.mazhuang.demo2
和 org.mazhuang123
等相关的 Services 都会列出来。
14) 与应用交互
15) 调起Activity
adb shell am start [options] <INTENT>
例如调起微信主界面:
adb shell am start -n com.tencent.mm/.ui.LauncherUI
调起 org.mazhuang.boottimemeasure/.MainActivity
并传给它 string 数据键值对 toast - hello, world
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
16) 调起Service
adb shell am startservice [options] <INTENT>
例如调起微信的某Service
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
17) 发送广播
adb shell am broadcast [options] <INTENT>
可以向所有组件广播,也可以只向指定组件广播。
例如,向所有组件广播 BOOT_COMPLETED
:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
又例如,只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver
广播 BOOT_COMPLETED
:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。
既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:
18) 强制停止应用
adb shell am force-stop <packagename>
示例:
adb shell am force-stop com.qihoo360.mobilesafe
19) 文件管理
复制设备里的文件到电脑
adb pull <设备里的文件路径> [电脑上的目录]
其中 电脑上的目录
参数可以省略,默认复制到当前目录。
示例:
adb pull /sdcard/sr.mp4 ~/tmp/
说明:设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 adb shell
和 su
命令在 adb shell 里获取 root 权限后,先 cp /path/on/device /sdcard/filename
将文件复制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc
复制电脑里的文件到设备
adb push <电脑上的文件路径> <设备里的目录>
示例:
adb push ~/sr.mp4 /sdcard/
说明:设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 adb push /path/on/pc /sdcard/filename
,然后 adb shell
和 su
在 adb shell 里获取 r