一.摘要
Android Debug Bridge(ADB)是一个多用途的命令行工具,搭建起开发者和模拟器或真机之间的“调试桥”,它是一个client-server program,包括三个组件: client,server,daemon
client,当前开发者电脑是一个客户端,开发者可以通过shell调用客户端发送一个adb命令。
server,运行在当前开发者电脑的一个后台进程是一个服务端,管理着client和daemon之间的通信。
daemon,运行在模拟器或真机上一个守护进程
当你启动一个adb client,首先会检查adb server后台进程是否已运行,如果没有,将会自动启动server process。运行的adb server绑定本地电脑的TCP端口:5037,同时监听adb client发送的命令,所有的adb client使用端口:5037和adb server通信。
server process将会与所以运行的模拟器或真机建立连接,它是通过扫描5555~5585的奇数端口号是否被使用来定位模拟器或真机是否连接。如果adb server发现了一个adb daemon,它将会使用其中一个端口与其建立连接。
PS:每一个模拟器或真机都需要一对有序的端口,其中偶数端口号用于console连接,奇数端口号用于adb连接,例如:
Emulator 1 ,console :5554
Emulator 1 ,adb :5555
Emulator 2 ,console :5556
Emulator 2 ,adb :5557
...
因此,可以确定模拟器通过端口5555建立adb连接,那么console监听的端口是5554。一旦server与模拟器或真机建立连接,开发者可以使用adb commands访问它们。
手机如何开启开发者调式模式?
使用adb功能需要通过USB与模拟器或设备建立连接,首先需要在系统配置的开发者选项中开启USB debugging。Android 4.2或更高版本,开发者选项默认是隐藏的,想要查看隐藏的选项,需要进入设置>关于手机>连续按下数字键,返回上一级界面后看到开发者调试选项。
PS:当Android 4.2.2或更高版本建立连接时,系统弹窗一个询问对话框是否当前电脑可以获取一串RSA密钥来允许调式应用程序。
adb命令
使用adb client命令之前你可以需要配置adb.exe系统环境变量,步骤:
1.配置sdk根路径:D:\Android\EclipseADT\adt-bundle-windows-x86_64-20140702\sdk
2.配置plateform-tools路径:%sdk_home%\platform-tools;
3.配置tools路径:%sdk_home%\tools;
Windows+R快捷键打开cmd命令行窗口,输入adb help查看命令帮助说明,如果出现下面窗口,说明sdk路径配置成功,否则可能需要重新配置。
下面这张表格罗列了adb client支持的所有命令,总结如何操作含义和使用方法。
2.1 指令参数说明 | ||
-a | adb直接监听所有的端口,搭建设备连接 | >adb -a devices |
-d | 直接发送指令到唯一连接的设备,如果存在多个连接设备,提示错误 | >adb -d push e:\temp.txt /sdcard/temp.txt |
-e | 直接发送指令到唯一运行的模拟器 | >adb -e shell |
-s |
发送指令给指定别名的设备,如果存在多个连接设备必须指定别名(adb devices查看别名) | >adb -s emulator-5555 |
-p |
创建一个相对或绝对路径的文件或路径 | >adb -p |
-H | adb server host名称,默认localhost | >adb -H localhost |
-P | adb server port端口号,默认5037 | >adb -P 5037 |
devices [-l] | 列出所有连接的模拟器或设备,-l列出详细信息 | >adb devices -l |
connect |
通过TCP/IP连接到设备,默认模拟器或测试机绑定端口5555,这个功能很好用,后面详细介绍;未添加任何IP,将断开连接 | >adb connect 192.168.1.102 |
disconnect |
从TCP/IP连接中断开 | >adb disconnect 192.168.1.102 |
2.2 模拟器或真机操作指令 | ||
push [-p] |
复制本地文件到模拟器或设备,可选项"-p"显示传输进度 | >adb push e:\zspg_2.1.5.apk /sdcard/zhaolin/zspg_2.1.5.apk |
pull [-p] [-a] |
复制模拟器或设备文件到本地,可选项"-p"显示传输进度,可选项"-a"复制时间戳和模式 | >adb pull -p /sdcard/zhaolin/zspg_2.1.5.apk e:\zspg_2.1.5.apk |
sync [ |
copy host->devices only if changed | >adb sync |
shell | 运行模拟器或设备的shell指令 | >adb shell |
shell |
运行模拟器或设备的交互命令 | >adb shell ls |
emu |
运行模拟器的console命令,前提启动模拟器 | >adb emu |
logcat [ |
查看设备log,可选项filter-spec指定拦截器 | >adb logcat cn.teachcourse.www |
forward --list | 列出所有重定向的socket连接 | >adb forward --list |
forward |
重定向socket连接 | >adb forward tcp:6100 tcp:7100 |
forward --no-rebind |
重定向socket连接失败 | >adb forward --no-rebind tcp:6100 tcp:7100 |
forward --remove |
删除指定的socket重定向连接 | >adb forward --remove tcp:6100 |
forward --remove-all | 删除所有的socket重定向连接 | >adb forward --remove-all |
reverse --list | 列出所有反向的socket连接 | >adb reverse --list |
reverse |
反向的socket连接 | >adb reverse tcp:7100 tcp:6100 |
reverse --norebind |
反向的socket连接失败 | >adb reverse --norebind tcp:7100 tcp:6100 |
reverse --remove |
删除指定反向的socket连接失败 | >adb reverse --norebind tcp:7100 |
reverse --remove-all |
删除所有反向的socket连接失败 | >adb reverse --norebind-all |
jdwp | 打印出可用进程的PIDs列表 | >adb jdwp |
install [-lrtsdg] |
push this file to 模拟器或设备安装,可选项-lrtsdg | >adb install -lrtsdg e:\zspg_2.1.5.apk |
install-multiple [-lrtsdg] |
push those files to 模拟器或设备安装,可选项-lrtsdg | >adb install-mutiple -lrtsdg e:\zspg_2.1.5.apk e:\demo_1.2.1.apk |
uninstall [-k] |
卸载指定包名的应用程序,可选项"-k"是否保存应用程序数据和缓存 | >adb uninstall com.sinolvc.zspg |
bugreport | 返回设备的所有信息,包含在bug report中 | >adb bugreport |
backup [-f |
备份指定包名的一个或多个应用程序到指定的文件,默认备份当前路径,名称backup.ab | >adb -f mybackup.ab -apk -obb -noshared -all -system com.sinolvc.zspg |
restore |
从备份中恢复设备内容 | >adb restore mybackup.ab |
disable-verity | disable dm-verity checking on USERDEBUG builds | >adb disable-verity |
enable-verity | re-enable dm-verity checking on USERDEBUG builds | >adb enable-verity |
keygen |
生成adb公钥和私钥,分别保存在文件 |
>adb keygen mykey |
help | 查看帮助文档 | >adb help |
version | 查看adb版本信息 | >adb version |
2.3 adb可执行的脚本 | ||
wait-for-device | 挂起状态,直到模拟器或设备online | >adb wait-for-device |
start-server | 启动a background Server | >adb start-server |
kill-server | kill a background Server | >adb kill-server |
get-state | 打印出:offline,bootloader,device | >adb get-state |
get-serialno | 打印出:serial-number | >adb get-serialno |
get-devpath | 打印出:device-path | >adb get-devpath |
remount | remounts the /system,/vendor |
>adb remount |
reboot [bootloader|recovery] | 重新启动当前设备进入bootloader或recovery程序 | >adb reboot bootloader |
reboot sideload | 重新启动当前设备进入sideload模式 | >adb reboot sideload |
reboot sideload-auto-reboot | 重启进入sideload模式,然后自动重启 | >adb reboot sideload-auto-reboot |
reboot sideload |
sideload 给定的package | >adb reboot sideload com.sinolvc.zspg |
root | 获取root permission重启adbd daemon | >adb root |
unroot | 失去root permission重启adbd daemon | >adb unroot |
usb | 重启USB监听器 | >adb usb |
2.4 adb网络操作指令 | ||
tcpip | 重启指定端口的TCP监听器 | >adb tcpip 5555 |
ppp |
通过USB运行PPP | >adb ppp |
adb sync [directory] | > | |
2.5 adb环境变量 | ||
ADB_TRACE | 打印出调试的信息 | |
ANDROID_SERIAL | 连接设备的序列号,-s优先级高于当前变量 | |
ANDROID_LOG_TAGS | logcat | >adb logcat ANDROID_LOG_TAGS |
无线建立ADB
了解无线建立ADB连接之前,TeachCourse就想自己弄一个局域网传输的小工具,利用同一个网段的IP地址,做一个PC端和手机,PC端发送apk文件到手机端,然后安装运行。尽管有很多社交软件都具备文件传输的功能,但公司的测试手机内存太小安装不了那么多社交软件,再说安装后PC端和手机端登录账号才可以传输文件,显得那么麻烦;如果通过USB连接,无缘无故提示安装各种手机助手,安装对应的驱动,也不太好使。
终于,发现了ADB的神奇的地方,可以无线让PC adb server与adb daemon建立连接,然后执行各种adb命令操作,比如:发送PC端apk文件到手机安装,打印手机logcat信息,手机录屏和手机截屏等等,这几种功能是钊林作为一名Android开发者经常用到的功能,心里非常的兴奋。
无线怎么搭建ADB?
1.Android设备和开发者电脑访问同一个网段的IP地址,如果你的PC端发送不了指令到手机,你可能需要检查一下防火墙是否配置支持该操作。
2.通过USB线连接当前设备到开发者电脑
3.检查主机的adb是否USB模式运行
- >adb usb
- restarting in USB mode
4.查看当前开发者电脑连接的设备
- >adb devices
- List of devices attached
- ###### device
5.在tcpip模式下重启主机adb
- >adb tcpip 5555
- restarting in TCP mode port:5555
6.查看当前手机的IP地址,步骤:设置->关于手机->状态->IP地址
7.使用adb连接到当前手机
- >adb connect 192.168.1.102
- connected to 192.168.1.102:5555
8.从当前电脑拔除USB线,仍然可以访问手机设备
- >adb devices
- List of devices attached
- 192.168.1.102:5555 device
然后就可以使用开发者电脑的adb client发送各种指令到当前连接的手机设备,windows+R快速打开cmd命令行窗口,输入:adb shell ls,查看当前手机设备的目录
安装PC端apk文件到当前连接的手机设备,使用命令:
- adb install -p e:\zspg_2.1.5.apk
录制手机屏幕,保存到手机,然后发送到PC端,使用命令:
- >adb shell screenrecord /sdcard/zhaolin/record.mp4
- >adb pull /sdcard/zhaolin/record.mp4 e:\record.mp4
PS:使用上述步骤操作,需要保证当前端口5555没有被占用,通常如果登录了QQ或开启其他手机助手软件,一旦插入USB线,在执行第三或第五步的时候,阻塞当前状态,打印不出下一行信息,然后执行第七步的时候,提示“由于目标计算机积极拒绝,无法连接。(10061)”。所以,上面的每一步检查对应的状态,测试的时候可以直接执行第七步,然后连接到设备手机,省略其他步骤。
你可能感兴趣的文章
转载请注明出处: https://www.teachcourse.cn/1936.html ,谢谢支持!