一、概要
1.什么是ADB?
ADB(Android Debug Bridge)是Android SDK中的一个工具, 使用ADB可以直接操作管理Android模拟器或者真实的Andriod设备。adb是一个C/S架构的命令行工具,主要由3部分组成:
(1)运行在PC端的Client:可以通过它对Android进行安装、卸载及调试
Eclipse 中的 ADT(虽然Eclipse已经不被Android开发者使用,但是为了理解还是拿出来说一下)、SDK Tools 目录下的 DDMS、Monitor 等工具,都是同样地用到了 adb 的功能来与 Android 设备进行交互。
PC 端的手机助手,诸如 360 手机助手、豌豆荚、应用宝等,其除了安装第三方应用方便,其他的功能,基本上都可以通过 adb 命令去完成,这里建议测试人员
尽量不要在电脑上安装这类手机助手,因为其自带的 adb 程序可能会与 Android SDK 下的 adb 程序产生冲突,5037
端口被占用,导致使用 adb 命令时无法连接到设备
(2)运行在PC端的Service:管理客户端到Android设备上adb后台进程的连接
adb 服务启动后,Windows 可以在任务管理器中找到 adb.exe 这个进程
(3)运行在Android设备上的adb后台进程
2.ADB的主要功能
(1)在Android设备上运行Shell(命令行)
(2)管理模拟器或设备的端口映射
(3)在计算机和设备之间上传/下载文件
(4)将电脑上的本地APK软件安装至Android模拟器或设备上
3.ADB工作原理
盗图一张
(1)当你启动一个adb Client(客户端),Client首先会选确认是否已有一个adb Server(服务器)进程在运行,如果没有,则会启动Server进程。此时,adb Server就会绑定本地的TCP端口5037,并监听adb Client发来的命令。
(2)接着,Server将会扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备,并与之建立连接。一旦Server找到 了adb daemon(守护程序),它将建立一个到该端口的连接,这样,我们就可以使用adb命令控制和访问模拟器或设备了。在这里,需注意的是任何模拟器或设备实例会取得两个连续的端口:一个偶数端口用来相应控制台的连接,和一个奇数端口用来响应adb连接。
4.ADB使用
一般我们只要将adb.exe所在目录添加到系统的环境变量中,就可以在命令行中使用adb命令了。
二、ADB命令
我们将命令分为adb命令、adb shell 命令和Linux命令三种来介绍。
adb命令
在开发或者测试的过程中,我们可以通过 adb 来管理多台设备,其一般的格式为:
adb [-e | -d | -s <设备序列号>] <子命令>
在配好环境变量的前提下,在命令窗口当中输入 adb help 或者直接输入 adb ,将会列出所有的选项说明及子命令。
下面我们介绍几个常见的命令:
- adb devices : 获取设备列表及设备状态
- adb get-state :获取设备的状态(注意这个命令只有有一个设备时才可以,有多个设备连接时会显示unknown)
设备的状态有 3 钟,device
, offline
, unknown
device:设备正常连接
offline:连接出现异常,设备无响应
unknown:没有连接设备
- adb kill-server / adb start-server :结束服务和启动服务,通常两个命令一起用,来重启adb服务
- adb logcat :打印Android的系统日志。输出内容比较多,最好重定位到一个文件
- adb bugreport :打印dumpsys、dumpstate、logcat的输出,也是用于分析错误的
- adb install :安装应用,覆盖安装使用-r选项
当apk已经安装过的时候,再次install就会报错,此时覆盖安装可以用-r
- adb uninstall :卸载应用,后面的参数是应用的包名,而不是apk文件的名称。卸载保存数据和缓存目录时用 -k
- adb push :推送本地文件至Android设备 例如,将本地E盘上的adb.log推送到sdcard目录下
我们可以看到在sdcard目录下已经有adb.log这个文件
- adb pull :将Android设备上的文件或者文件夹复制到本地
这里我们将sdcard目录下的adb.log文件复制到本地E盘下,并重命名为rename.log。
注意:在执行adb pull和adb push两个命令的时候注意权限问题,当操作系统权限的目录下的文件时,需要root
- adb root :获取root权限
- adb remount:挂载文件系统为可读写状态
- adb reboot:重启Android设备
- adb forward:将宿主机上的某个端口重定向到设备的某个端口
- adb connect:远程连接Android设备
adb shell命令
首先要区分一下adb 命令和adb shell 命令。简单讲,adb命令是adb这个程序中自带的一些命令,而adb shell命令则是调用的Android系统中的命令,这些命令都在Android设备的system/bin目录之下。
截取一部分system/bin目录下的内容,有没有很熟悉的,如am 、pm、dumpsys等等。
接下来介绍几个常用的adb shell命令
pm命令
Package Manager,可以用来获取到一些安装在Android设备上的应用信息。直接运行adb shell pm命令可以获取该 命令的帮助信息。
注意这个命令可以直接敲成 adb shell pm list package,也可以先敲adb shell 进入shell之后再敲pm list package
- pm list package :列出安装在设备上的应用(只截一部分图)
另外还有带选项的
-s : pm list package -s 列出系统应用
-3:pm list package -3 列出第三方应用
-f: pm list package -f 列出应用包名及对应apk名称及存放的位置(部分截图)
-i : pm list package -i 列出应用包名及安装来源(部分截图)
还可以增加过滤关键字,查找自己想要的应用。如下,查找和联系人(contact)相关的应用
- pm path <包名> 列出对应包名的.apk的位置
- pm list instrumentation 列出含有单元测试case的应用后面可跟参数-f,同样也会列出apk名称和位置以及 [TARGET-PACKAGE]
- pm dump <包名> 列出指定应用的dump信息
- pm install 安装应用
目标apk存放于PC端,用adb install安装;
目标apk存放于Android设备上,用pm install 命令安装
- pm uninstall <包名> 卸载应用
- pm clear 清除应用数据
- pm set-install-location ,pm get-install-location <包名> 设置应用安装位置,获取应用安装位置
这里的位置分为三种:
[0/auto]:默认为自动
[1/internal]:默认为安装在手机内部
[2/external]:默认安装在外部存储
am命令
Activity Manager,可以使用am命令去模拟各种系统行为
- am start 启动一个Activity
另外还有几个带参数的例子
adb shell am start -S com.example.eventtest/.MainActivity :先停止目标应用,再启动
adb shell am start -W com.example.eventtest/.MainActivity :等待应用启动完成
adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com :启动浏览器打开一个指定的网页
adb shell am start -a android.intent.action.CALL -d tel:10086 :启动拨号器拨打10086
- am instrument :启动一个instrumentation,单元测试或者Robotium会用到
- am monitor :监控crash于ANR
- am force-stop <包名> :结束应用
- am startservice :启动一个服务
- am broadcast :发送一个广播
ps命令
Process status,查看进程状态的命令,该命令像是瞬间进程的状态
input命令
这个命令可以向Android设备发送按键事件
- input text :发送文本内容,不能发送中文。
- input keyevent :发送按键事件。模拟按下HOME键,源码里有定义public static final int KEYCODE_HOME = 3,因此可以将命令中的KEYCODE_HOME替换成3。
- input tap :对屏幕发送一个触摸事件。触摸屏幕700 1000的位置
- input swipe :滑动事件。模拟从(500,500)的点滑到(500,1000)的点
如下就是在小距离内,较长事件内滑动,实际上就是长按的动作
screencap 命令
截图命令
adb shell screencap -p /sdcard/screen.png :截屏并保存到sdcard目录下,命名为screen.png
scrernrecord 命令
4.4新增的录制命令
adb shell screenrecord sdcard/record.mp4 :ctrl+c结束录制,录制结果将会保存在sdcard目录下
ime 命令
输入法命令
adb shell ime list -s :列出设备上的输入法
adb shell ime set <上述某个输入法> :选择输入法
wm 命令
adb shell wm size :获取屏幕分辨率
monkey
settings
Settings.java,请参考 探究下 Android4.2 中新增的 settings 命令
dumpsys
log
在logcat 里面打印设定的信息
getprop
查看Android设备的参数信息。结果以key:value键值对形式显示。
引号
在PC端执行monkey命令,将信息保存至D盘monkey.log
adb shell monkey -p com.android.settings 5000 > d:\monkey.log
(这里-p的意思是指定的包,如果不指定包,Monkey将允许系统启动设备中的所有APP。5000是指5000个随机事件)
在PC端执行monkey命令,将信息保存到sdcard,写成
adb shell monkey -p com.android.settings 5000 > sdcard/monkey.log
会报"系统找不到指定的路径"的错,这里要加上引号
adb shell “monkey -p com.android.settings 5000 > sdcard/monkey.log”
Linux命令
- cat
用来查看文件内容的命令。
1.cat filename : 一次显示整个文件
2.cat > filename :从键盘创建一个文件,只能创建新文件,不能编辑已有的文件。编辑完成后Ctrl+D退出
3.cat file1 file2 > file :合并已有文件为一个文件
- cd
切换当前目录到指定的目录
- chmod
设置文件权限的命令
- cp
复制文件或目录的命令
- grep
用于查找文件里符合条件的字符串
- netstat
用于显示网络状态
- rm
用于删除一个文件或者目录
- rmdir
删除空的目录
这里不再过多讲述,附上一个Linux命令大全的链接
http://www.runoob.com/linux/linux-command-manual.html
参考文章
https://www.cnblogs.com/bravesnail/articles/5850335.html