android开发环境中,ADB是我们进行android开发经常要用的调试工具,它的使用当然是我们Android开发者必须要掌握的;
ADB概述
Android Debug Bridge,Android调试桥接器,简称ADB,是用于管理模拟器或真机状态的万能工具,通俗一点讲adb就是pc和移动设备通信的桥梁,它采用了c/s模型,包括三个部分:
1、客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端,需要说明的是客户端与手机或者模拟器是一对多的关系,也就是说不管连接多少设备客户端就只有唯一的一个实例存在。
2、服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。
3、守护进程部分,运行于模拟器或手机的后台(简称adb daemon)。
ADB原理解析
下边我先展示两张adb工作原理图如图一,二所示:
从图一我们可以大概了解到adb三个角色之间的关系,其中adb client和adb server运行在我们的电脑上边,adb daemon运行在我们连接的移动设备后台;
理清了他们三者的关系后大家肯定很好奇它们之间是怎么互相通信的呢?使用何种通信协议以及哪些通信端口呢?
好吧,其实它们之间是通过tcp/ip协议建立长连接实现通信;
当adb客户端启动后,会主动寻找并尝试连接adb服务进程,如果服务进程没有启动就会被主动启动,如果服务进程已经启动则它们会立即建立连接并通过本地5037端口进行通信,接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描 5555-5585 之间的奇数号端口来搜索模拟器或手机,一旦发现 adb 守护进程,就通过此端口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于 adb 连接,当服务端与所有的模拟器建立连接之后,就可以使用 adb 命令来控制或者访问了。因为服务端管理着连接并且可以接收到从多个 adb 客户端的命令,所以可以从任何一个客户端或脚本来控制任何模拟器或手机设备;
通过adb控制移动设备必须确保设备和电脑已经正常连接,常用的连接方式有两种:
1:usb电缆连接,这种方式我就不过多介绍了,大家平时大多都是用的这种连接方式;
2:wifi连接,步骤如下所示
a:将电脑和手机连接同一个wifi网络,确保它们的ip在相同的网段;
b:将移动设备用usb电缆连接;
c:设置目标设备监听5555端口 命令是 : adb tcpip 5555;
d:断开连接的电缆线;
e:找到移动设备使用的ip地址(设置/关于手机/状态消息/ip地址);
f:通过adb连接到当前的移动设备 命令是 - adb connect device_ip_address;
g:确认你的设备已经和pc主机正常连接,我们可以通过执行adb devices命令查看是否连接成功;
如果一段时间adb断开连接,我们可以重复上边的步骤重新连接;
常用的ADB命令
1:adb devices/adb get-serialno
作用:列举当前连接的设备(可以是多个设备);
执行结果如下所示:
Listof devices attached
emulator-5554device
emulator-5556device
emulator-5558device
adb get-serialno只能当连接一个设备时使用,并拿到设备的序列号;
2:adb -s / -e / -d
作用:指定对某个连接成功的设备执行命令;
adb -s emulator-5556 install helloWorld.apk
这条命令就是往emulator-5556模拟器安装apk文件;
-s: 指定要操作的设备;
-e: 默认操作模拟器;
-d:默认操作硬件设备;
3:adb install -r/-s
作用:使用adb install命令可以从开发用电脑中复制应用程序并且安装到模拟器或手机上,adb install命令必须指定待安装的.apk文件的路径;
-r:保留数据和缓存文件,重新安装apk
-s:安装apk到sd卡
4:adb uninstall [-k]
作用:卸载指定包名的apk文件,(-k:不删除程序运行所产生的数据和缓存目录)
5:adb pull [-a]
作用:从模拟器或手机拷贝文件或文件夹(包括文件夹的子目录)到电脑(-a:保留文件时间戳及属性),remote-path为手机端文件路径,local-path为文件复制到的路径;
6:adb push
作用:将文件或文件夹(包括文件夹的子目录)拷贝到模拟器或手机;
比如,我想把桌面的 log.txt 复制到手机的 dev 目录下,则命令如下:
adb push /Users/littlejie/Desktop/log.txt /dev
7: adb kill-server 和 adb start-server
作用:在某些情况下需要重启 adb 服务来解决问题,比如 adb 无响应,这时你可以通过adb kill-server来实现这一操作,之后,通过adb start-server命令来重启 adb 服务;
8: adb help
作用:调出adb命令提示;
9: adb reboot
作用:重启连接成功的设备。
如果连接了多个设备可以指定重启其中一个设备,命令如下
adb -s xxx reboot
10: adb shell cat /sys/class/net/wlan0/address
作用:获取机器mac地址;
说明:adb shell命令表示进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令;
adb shell netcfg //查看当前连接成功手机的ip地址;
11: adb shell am start -n
作用:启动指定包名的应用
12: adb shell ps
作用 :列出当前运行的进程;
13: adb shell ls/adb shell cd xx/adb shell rename path/oldfilename path/newfilename/adb shell rm -r /adb shell mv path/file newpath/file
adb shell ls 作用:列出目录下的文件和文件夹;
adb shell cd
adb shell rename
adb shell rm -r
adb shell mv
14: adb shell mkdir path/foldelname
作用:新建文件夹;
adb shell chmod777
adb shell cat
15: adb forward tcp:8000 tcp:9000
作用:执行此命令后, PC端的8000端口会被adb监听, 这个时候我们只需要往8000端口写数据, 这个数据就会发送到手机端的9000端口上,一般用来主机和移送设备进行额外的数据传输;
16: adb shell am XX
常见的命令如下所示:
a:adb shell am start [options] intent;
//使用Action方式打开系统设置-输入法设置
adb shell am start -a android.settings.INPUT_METHOD_SETTINGS
//使用组件名方式启动照相机功能
adb shell am start -ncom.android.camera/.Camera //打开拨号界面,并传递一个DATA_URI数据给拨号界面
am start -a android.intent.action.CALL-d tel:10086
b: adb shell am startservice
//使用ComponentName 方式启动一个Service
adb shell am startservice com.some.package.name/.YourServiceSubClassName
c: adb shell am force-stop
adb shell am force-stop com.some.package
d: adb shell am kill
adb shell am kill com.some.package
e: adb shell am monitor //监控程序的crash和anr错误;
17:adb shell pm XX
a: adb shell pm list packages [option] filter //列出当前已安装的应用包名
根据filter可以搜索你需要的包名;
b: adb shell pm list permission-groups //查看所有可用的权限
c : adb shell pm list permissions [options] group //查看某个权限组下边所有的权限
d: adb shell pm path
e: adb shell pm clear
f: adb shell pm set-install-location location //改变apk默认安装位置(只能在已root设备使用,未root设备会报java.lang.SecurityException异常)
Changes the default install location. Location values:
0: Auto—Let system decide the best location.
1: Internal—install on internal device storage.
2: External—install on external media.
Note:This is only intended for debugging; using this can cause applications to break and other undesireable behavior.
g: adb shell pm get-install-location //获取系统默认安装位置
h: adb shell screencap /sdcard/screen.png //截图当前页面并保存到指定目录