adb ( Android Debug Bridge) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。
Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动 cmd 输入 ‘adb’ 即可查看是否配置成功(这个在前面章节配置 android-sdk 中已介绍)
adb 的工作原理
启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程 (adb-server)。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令 -------- 所有 adb 客户端均使用端口 5037 与 adb-server 通信。
ps:PC 端的手机助手,诸如 360 手机助手、豌豆荚、应用宝等,其除了安装第三方应用方便,其他的功能,基本上都可以通过 adb 命令去完成,这里建议测试人员尽量不要在电脑上安装这类手机助手,因为其自带的 adb 程序可能会与 Android SDK 下的 adb 程序产生冲突,5037 端口被占用,导致使用 adb 命令时无法连接到设备
运行在 Android 设备上的 adb 后台进程
执行 adb shell ps | grep adbd ,可以找到该后台进程,windows 请使用 findstr 替代 grep
adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用
一般在连接出现异常,使用 adb devices 未正常列出设备, 设备状态异常时使用 kill-server,然后运行 start-server 进行重启服务
启用 adb 调试
要在通过 USB 连接的设备上使用 adb,您必须在设备系统设置中启用 USB debugging(位于开发者选项中,上个章节有提到,在运行 Android 4.2 及更高版本的设备上)。
ps:当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。
adb 常用命令
adb connect 127.0.0.1:62001
(夜神模拟器的端口是规律的,第一个模拟器端口是 62001,第二个模拟器端口是 62025,第三个是 62025+1,依此类推)
如果在连接过程中出现如下提示:
adb server version (31) doesn't match this client (36); killing...
原因: adb 版本不对 ,Androd SDK 的版本和模拟器的 adb 版本不一致
解决方案:将 Android SDK 的 adb 替换掉模拟器的 adb 即可。mac 中模拟器 adb 路径 :/Library/{app 名称}/MacOS/下
*查看已连接的设备:adb devices *
daideMacBook-Pro:~ dai$ adb devices
List of devices attached
127.0.0.1:62001 device
adb get-state , 获取设备的状态
[~]$ adb get-state
device
设备的状态有 3 钟,device , offline , unknown
device:设备正常连接
offline:连接出现异常,设备无响应
unknown:没有连接设备
adb shell
# 进入 android shell 交互界面
adb shell
# 进入指定设备 shell
adb -s 127.0.0.1:62001 shell
# 退出 adb shell
exit
进入 adb shell 后有两种状态显示:# 代表有 root 权限,$ 代表没有 root 权限 --- 在 Unix、Linux 及 Android 中,除非确实需要,一般情况下都不推荐使用 root
通过 adb 命令 给设备/模拟器安装 apk 应用
adb install | -r -r 覆盖原安装文件 -s 可以指定设备
# 默认安装
adb install /xxxxx/xxxxx/xxx.apk
# 覆盖安装
adb install -r /xxxxx/xxxxx/xxx.apk
# 指定设备安装
adb -s 127.0.0.1:62001 install /xxxxx/xxxxx/xxx.apk
如遇到报错:Failure [INSTALL_FAILED_INVALID_URI]
解决方案: cmd 命令行下执行以下命令:
第一步、adb remount
第二步、adb shell
第三步、cd /data
第四步、chmod 777 local
重新安装 apk,ok 了。
通过 adb 查找设备安装的应用
adb shell pm list package
-s:列出系统应用
-3:列出第三方应用
-f:列出应用包名及对应的 apk 名及存放位置
-i:列出应用包名及其安装来源,结果显示例子:
adb shell pm list package -i
package:com.zhihu.android installer=com.xiaomi.market
命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用
参数组合使用,例如,查找三方应用中知乎的包名、apk 存放位置、安装来源:
[:~]$ adb shell pm list package -f -3 -i zhihu
package:/data/app/com.zhihu.android-1.apk=com.zhihu.android installer=com.xiaomi.market
pm path 列出对应包名的 .apk 位置
[:~]$ adb shell pm path com.tencent.mobileqq
package:/data/app/com.tencent.mobileqq-1.apk
通过 adb 命令 卸载设备/模拟器中的应用
通过 adb shell pm list package xxx(应用名) 找到对应的应用包名
adb uninstall xxx(如:com.zhihu.android) 进行卸载应用
文件读 取写入
将文件从 PC 写入到设备
adb push
adb push /Users/dai/kyb.txt /sdcard
将文件从设备读取到 PC
adb pull
adb pull /sdcard/server.log /Users/dai
屏幕截图
$ adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png /Users/dai
ps:保存的图片不能使 jpg 格式,貌似是兼容性问题,pull 下来会打不开的
区分 adb 命令和 adb shell 命令
简单点讲,adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下