Android Debug Bridge

2016-07-09 23:36 阅读 4,478 次 评论 0 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1936.html

一.摘要

Android Debug BridgeADB)是一个多用途的命令行工具,搭建起开发者和模拟器或真机之间的“调试桥”,它是一个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密钥来允许调式应用程序。
001-screencap

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 ] [-apk|-noapk] [-obb|-noobb] [-shared|noshared] [-all] [system|nosystem] [] 备份指定包名的一个或多个应用程序到指定的文件,默认备份当前路径,名称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公钥和私钥,分别保存在文件.pub,,覆盖已存在的公钥和私钥 >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 and /oem partitions on the device read-write >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 [parameters] 通过USB运行PPP >adb ppp [parameters]
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模式运行

  1. >adb usb  
  2. restarting in USB mode  

002-adb usb

4.查看当前开发者电脑连接的设备

  1. >adb devices  
  2. List of devices attached  
  3. ######  device  

5.在tcpip模式下重启主机adb

  1. >adb tcpip 5555  
  2. restarting in TCP mode port:5555  

6.查看当前手机的IP地址,步骤:设置->关于手机->状态->IP地址

7.使用adb连接到当前手机

  1. >adb connect 192.168.1.102  
  2. connected to 192.168.1.102:5555  

003-adb tcpip

8.从当前电脑拔除USB线,仍然可以访问手机设备

  1. >adb devices  
  2. List of devices attached  
  3. 192.168.1.102:5555 device  

004-adb devices
然后就可以使用开发者电脑的adb client发送各种指令到当前连接的手机设备,windows+R快速打开cmd命令行窗口,输入:adb shell ls,查看当前手机设备的目录

安装PC端apk文件到当前连接的手机设备,使用命令:

  1. adb install -p e:\zspg_2.1.5.apk  

005-adb install
录制手机屏幕,保存到手机,然后发送到PC端,使用命令:

  1. >adb shell screenrecord /sdcard/zhaolin/record.mp4  
  2. >adb pull /sdcard/zhaolin/record.mp4 e:\record.mp4  

PS:使用上述步骤操作,需要保证当前端口5555没有被占用,通常如果登录了QQ或开启其他手机助手软件,一旦插入USB线,在执行第三或第五步的时候,阻塞当前状态,打印不出下一行信息,然后执行第七步的时候,提示“由于目标计算机积极拒绝,无法连接。(10061)”。所以,上面的每一步检查对应的状态,测试的时候可以直接执行第七步,然后连接到设备手机,省略其他步骤。

关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1936.html
分类:Android 标签:, , ,
Android学习笔记八:Java常用数据结构 Android学习笔记八:Java常用数
非常实用的Lenovo G40 Windows8系统进入BIOS收藏手册 非常实用的Lenovo G40 Window
浅谈final关键字 浅谈final关键字
Eclipse开发项目中红色感叹号问题解决办法 Eclipse开发项目中红色感叹号问

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情