ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## adb简介及使用 **针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。** **Android Debug Bridge** **1 介绍** adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个*C/S*架构的命令行工具,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb就派上用场啦!下面我们学习一下常用的adb命令吧! >[danger] ## 项目一:真机测试连接设备(由于不方便演示且不用设备连接方式有所不同 所以在本教程中仅仅演示连接方式,adb命令和模拟器是一样的) 1. 在桌面的应用列表中找到“设置”,点击进入。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/d400248ca608a50fe4b9f73810cec7f88b77ff99.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 2. 在列表中找到“关于”选项(一般在列表底部),点击进入。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/e6ae36066b0192dd4e0511471a87031c98c0f099.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 3. 找到“软件信息”选项,点击进入。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/359bee5e4a2379717258316c93196120a6cde399.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 4. 选择“更多”选项(有些设备的版本号可能在此目录下,请忽略此步骤)。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/bab5c45872dade49fb4a2ce226042e6816e9d599.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 5. 找到“内部版本号”或者“版本号”,快速连击数下(手机不同需要点击的次数可能也会有所不同),然后系统会有如图提示。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/d47cb624d8e9ccd21d23f6ed0e40102a05e2c999.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/a13bbe10bc33ec3885febe5b295f0c14c37b3c9e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 6. 这时回到设置主界面,发现“关于”上方出现了“开发人员选项”。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/87c8bf46b7b1eef9c4f8ebc8bfb33c4132ba329e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 7. 点击进入刚刚出现的“开发人员选项”,此功能默认为关闭,需要将右上角的开关打开。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/023cff37c97622bcb88068d3a05fd5460496289e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) 8. 勾选“usb调试”,系统会例行提示,选择“确定”,此时您的安卓手机已打开了usb调试,您可以将手机连接到电脑进行数据备份、root、刷机等操作。 ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/b442d6d246fe474e12c6940bb0ef354f51b81f9e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) ![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/b57fb6db574afa324ad98b4354b2dc19cf2c149e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80) >[danger] ## 项目二:使用模拟器测试连接设备 **2、连接设备** 打开cmd(如果使用MuMu自带adb,则cd C:\\Program Files (x86)\\Nemu\\vmonitor\\bin\\) adb kill-server(MuMu自带:adb\_server.exe kill-server) 连接模拟器端口:adb connect 127.0.0.1:7555(MuMu自带:adb\_server.exe connect 127.0.0.1:7555 夜神自带:adb connect 127.0.0.1:62001) 列出已连接的设备:adb devices ![](https://img.kancloud.cn/1e/ae/1eae4a2ff95ba3b222e2496e41f98717_426x56.png) 注意:如果设备列表里没有显示127.0.0.1:7555设备,则可多次尝试adb kill-server和adb connect 127.0.0.1:7555连接,不同的模拟器端口号有所不同有的模拟器使用自带的adb命令可以直接连接成功的 **3、如何在连接多个设备下对MuMu模拟器进行操作** 命令格式:adb -s 模拟器端口 其他命令,如:adb -s 127.0.0.1:7555 shell pm list package -3 (注意:如果连接的设备数量超过1台必须在执行任何命令之前添加 此参数否则无法执行成功) **4、安装与卸载apk** 在已连接MuMu设备下输入以下命令: 安装apk adb install C:\\\\xx.apk 卸载apk adb uninstall 包名 **5、获取已安装应用包名** 所有应用包名列表 adb shell pm list packages 第三方应用包名列表 adb shell pm list packages -3 系统应用包名列表 adb shell pm list packages -s 正在运行应用包名 adb shell dumpsys window | findstr mCurrentFocus ![](https://img.kancloud.cn/29/28/292859061ff0bdf2a1a92e5616e4a15d_568x131.png) **6、获取已安装应用Activity类名** adb logcat ActivityManager:I \*:s | findstr "cmp"后启动目标应用 如启动第五人格: ![](https://nie.res.netease.com/r/pic/20190129/0328e8b1-3297-4e69-8669-a2009bbc86ab.png) 第一个cmp=com.netease.dwrg/.Launcher则表示:应用包名/应用Activity类名,完整Activity名=com.netease.dwrg.Launcher **7、启动应用** adb shell am start -n 应用包名/应用Activity类名 如启动第五人格应用: adb shell am start -n com.netease.dwrg/.Launcher 若想查看启动应用耗时,则可使用adb shell am start -W 应用包名/应用Activity类名,如: ![](https://img.kancloud.cn/52/00/52006f362ac9e865679ec5a72cb224b7_972x134.png) **8、关闭应用** adb shell am force-stop 应用包名 如关闭第五人格应用: adb shell am force-stop com.netease.dwrg **9、查看应用版本号** adb shell dumpsys package 应用包名 | findstr version 如查看第五人格版本号: ![](https://img.kancloud.cn/27/9c/279c6a38c77e73ec408ffad54e2c300c_797x60.png) **10、清理应用数据** adb shell pm clear 应用包名 **11、模拟输入** 按键输入 adb shell input keyevent 键值 如:adb shell input keyevent 3表示按下HOME键,其他键值对应键位可网上搜索 字符输入 adb shell input text 字符 如:adb shell input text test则表示输入了test字符串 ps:字符不支持中文 鼠标点击 adb shell input tap X Y X Y分别为当前屏幕下的x和y轴坐标值 鼠标滑动 adb shell input swipe X1 Y1 X2 Y2 X1 Y1 和X2 Y2分别为滑动起始点的坐标 **12、从电脑上传文件至模拟器** adb push C:\\test.apk /data **13、从模拟器复制文件至电脑** adb pull /data/test.apk C:\\ **14、截图** 将模拟器当前显示截图 adb shell screencap /data/screen.png 将截图文件下载至电脑 adb pull /data/screen.png C:\\ **15、录制视频** 开始录制 adb shell screenrecord /data/test.mp4 结束录制 可按CTRL+C结束录制 导出视频文件 adb pull /data/test.mp4 C:\\ **16、查看设备信息** 设备型号 adb shell getprop ro.product.model 设备品牌 adb shell getprop ro.product.brand 设备处理器型号 adb shell getprop ro.product.board 设备安卓版本号 adb shell getprop ro.build.version.release 设备引擎渲染模式 adb shell dumpsys SurfaceFlinger|findstr "GLES" **17、其他** adb logcat 获取系统的比较及时的日志信息(是整个系统的日志所有程序包括系统程序) 1. dumpsys: dumpsys命令可以提供非常多的系统信息。可以通过**adb shell service list**来查看dumpsys能提供查询信息的服务,常用的有: ![](https://img.kancloud.cn/f8/c3/f8c3860eb2c6a2fbf4ac58962cf2ecf6_856x393.PNG) 例如,要查看电池信息,命令行输入**adb shell dumpsys battery**,可以看到如下图: ![](https://img.kancloud.cn/a9/59/a9590e5b80b58f492c3c30f8d3ba603a_647x329.PNG) * 使用**adb shell dumpsys activity**查看信息,会有很长的代码,分析其结构,可以把上述命令得到的信息拆分为: ``` dumpsys activity intents dumpsys activity broadcasts dumpsys activity providers dumpsys activity permissions dumpsys activity services dumpsys activity recents dumpsys activity activities dumpsys activity processes ``` 补充的几个常用的命令 adb shell am start -W 包名/xxxActivity 执行结果解释: 1、ThisTime:一般和TotalTime时间一样,除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小。 2、TotalTime:应用的启动时间,包括创建进程+Application初始化+Activity初始化到界面显示。 3、WaitTime:一般比TotalTime大点,包括系统影响的耗时。 **【如何抓包】** **步骤一,**分别下载最新版本的“fiddler”和”mumu模拟器”; **步骤二,**启动 fiddler Tools -> Options -> Connections 勾选 allow remote computers to connect (允许远程计算机连接) 重启程序,切记:一定要重启; ![](https://img.kancloud.cn/62/1e/621e3453e0bdca1cf15c824c16c3f951_813x552.png) ![](https://img.kancloud.cn/97/8a/978a2b0eff9f68546f656cc6b891bfd1_813x552.png) ![](https://img.kancloud.cn/d0/cb/d0cbb84e81c137166e81689a3747b0af_813x552.png) **步骤三,**查看IP,如果有虚拟网卡,所以需要ipconfig /all查看真实IP; ![](https://img.kancloud.cn/5b/ba/5bbacf56f1b51ef6fc586931d00b219c_513x383.png) ![](https://img.kancloud.cn/ce/2a/ce2a8957e91f9e57ed5364173a0bb1e5_820x349.png) **步骤四,**启动mumu模拟器,设置代理; ![](https://img.kancloud.cn/81/2f/812f6349a4e9e407dbde4d6233458d35_1024x576.png) ![](https://img.kancloud.cn/03/fc/03fcd79821f69cacef19f52f01118eae_1024x576.png) ![](https://img.kancloud.cn/7a/a6/7aa62f14aac100f3da8b5831ff4a51aa_1024x576.png) ![](https://img.kancloud.cn/a0/c1/a0c1905e47cdacb7079b485172ae077a_1024x576.png) ![](https://img.kancloud.cn/55/79/5579dbd44b7588540555b520d75e5c66_1193x702.png) **步骤五,**保存后即可操作。 ![](https://img.kancloud.cn/6b/d6/6bd64a2687f4bcd75c516512a3c00bb0_1024x584.png) >[danger] # Monkey的使用 Monkey是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试。主要是为了测试app是否存在无响应和崩溃的情况。 # 一、环境搭建   只要按照配置Android SDK环境和环境变量即可。 # 二、Monkey的使用 ## 1、进入adb shell环境 ## 最近经常提到命令一词那究竟什么事命令呢?其实任何一个命令都是其平台下个一个文件而已(win平台,Linux平台,Mac平台)那在我们学习monkey之前来找一下这个文件究竟在哪里?执行下面的命令试试看 ``` find / -iname monkey ``` 有时候在cmd窗口中输出的日志太多时可以使用重定向输出到文件中 ``` 命令 + >D://aa.txt ``` ![](https://img.kancloud.cn/3f/6d/3f6d2d724bbeee606f3f23ec45d8dd27_620x373.png)   在windows环境中,进入DOS界面,在界面中,输入adb shell即可进入adb shell环境 (注意:adb shell服务使用的5037的端口,如果此端口被其他进程占用时,将不能正常启动adb shell,问题处理方法见:[启动adb shell报错](https://www.cnblogs.com/smallstone2018/p/10024438.html)) 如:  ![](https://img2018.cnblogs.com/blog/1459388/201811/1459388-20181127091437089-1048473024.png)   表示adb shell启动成功,shell@\*\*\*\*:/$中,\*\*\*\*表示设备id。$:表示普通用户;#表示root用户。 ## 2、在adb shell环境下输入monkey的相应命令即可。 如: ![](https://img.kancloud.cn/c6/30/c6307f903831a9c6c538957673332076_259x27.png) ## 3、查看需要测试的包名   如果有root权限,可以进入/data/data/下使用ls/ls-a查看(不能使用ll)   如果无root权限,可以使用:pm  list packages查看   (需要控制monkey执行的时间,可以通过设置执行时长/事件发送延时,计算出需要执行的次数。如:想要monkey运行24小时,每100毫秒发送一个事件。24\*60\*60\*1000/100=864000(次)   monkey -p   \*\*\*  --ignore-crashes --ignore-timeoutss --throttle 100 864000   表示:此次monkey将会运行24小时 # 三、Monkey的命令参数详细说明   monkey的命令参数分为:   基础参数:\-v、\-s、\-p、\--throttle等   调试选项:\--ignore-crashes等   事件类型:\--pct-touch等 ![](https://img.kancloud.cn/6a/e1/6ae10d5dc14a4c049b2e1b76210e5f19_548x435.png) ## (一)基础参数 ### 1、最简单的monkey命令(monkey 100) 表示:在设备上,针对整个系统发送100个伪随机事件。 ![](https://img.kancloud.cn/a0/ea/a0eae2c097b1df83ac583f342ad794dc_553x109.png) ### 2、\-v参数 用于指定反馈信息级别(信息级别就是日志的详细程度)总共分为3级,默认为\-v(对应:level0) \-v:只提供启动提示、测试完成提示和最终结果等少量信息。 \-v -v:较为详细的日志,包括每个发送到activity的时间信息。 \-v -v  -v:最详细的日志,包括测试中选中/未选中的activity信息。 ![](https://img.kancloud.cn/f4/42/f442f0c3d162ea4504bd89e219406f94_553x304.png) ![](https://img.kancloud.cn/ee/66/ee66c4df4937b31f9a5842ca732c55c6_553x297.png)   注意:在monkey测试完成时,最后一定会有一个:monkey finished标识。 ### 3、\-p参数   在我们测试时,是针对具体的app进行测试的,所以在使用monkey测试时,我们需要提供具体的app包名给monkey,此时就需要用到参数\-p。在\-p后跟随app包名。   在测试时,可以不指定包名,此时monkey会在测试设备上随机启动app进行操作;如果只需要测试一个app,使用一个\-p即可;如果有多个app同时测试,可以直接使用\-p包名1 -p包名2指定具体要测试的app。 如: ![](https://img.kancloud.cn/f7/f4/f7f4d1d846eab56e857a1e65ee220e8a_553x374.png) ### 4、\-s参数   种子值(seed),因为monkey是发送的是伪随机的事件流,但是如果两次seed值相同,那两次monkey测试所产生的事件序列也相同。(所以一般在测试时要记录seed值,以防出现无响应和crash,不容易验证。)   注意:\-s需要跟在包名后,次数前 ### 5、\--throttle参数   设置执行操作的延迟时间(毫秒)\--是指两个事件之间的间隔,如果没有指定此参数,会尽可能快的生成和发送事件。 ## (二)调试选项 ### 1、\--ignore-crashes   用于指定当应用程序崩溃时,Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,monkey依然会发送事件,直到事件计数完成。 ### 2、\---ignore-timeouts   用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。 ### 3、\--ignore-security-exceptionss   用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。 ### 4、\--kill-process-after-error   用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。 ### 5、\--monitor-native-crashes   用于指定是否监视并报告应用程序发生崩溃的本地代码 ### 6、\--hprof   该选项设置后,将会在monkey事件序列前后立刻生成report,大小为大于5MB,存储在/data/misc ## (三)事件类型 ``` public static final int FACTOR_TOUCH = 0; public static final int FACTOR_MOTION = 1; public static final int FACTOR_PINCHZOOM = 2; public static final int FACTOR_TRACKBALL = 3; public static final int FACTOR_ROTATION = 4; public static final int FACTOR_PERMISSION = 5; public static final int FACTOR_NAV = 6; public static final int FACTOR_MAJORNAV = 7; public static final int FACTOR_SYSOPS = 8; public static final int FACTOR_APPSWITCH = 9; public static final int FACTOR_FLIP = 10; public static final int FACTOR_ANYTHING = 11; ```   monkey在发送伪随机事件时,是有不同的类型的。默认随机分配比例,也可以指定其百分比。如果不设置会是\--pct-anyevent为100%,也就是纯随机事件;如果配置了其他参数,但是不够100%,余下的百分比部分也是\--pct-anyevent事件。 如: ![](https://img.kancloud.cn/41/47/41473e85d889accf237f22cd1d7860ec_218x219.png) 目前共包含11中类型的事件。 分别为: **0:触摸事件\--pct-touch**   调整touch触屏事件的百分比,触碰事件就是指在屏幕上的一个单独位置的一次点击/抬起的事件。 **1:滑屏事件\--pct-motion(手势事件)**   (手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯) **2:--pct-pinchzoom** **3:轨迹球\--pct-trackball**   (轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样) **4:旋转(\--pct-rotation)**   旋转屏幕 **5:--pct-permission** **6:导航\--pct-nav**   (导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有) **7:主导航\--pct-majornav**   调整主要导航事件的百分比(如中间键、取消、确定或菜单引发的图形接口的动作) **8:系统按键\--pct-syskeys** 调整 “系统” 按键事件的百分比 (这些按键通常被保留,由系统使用,如 Home、Back、Start Call、End Call 及音量控制键) **9:app切换\--pct-appswitch**   调整启动activity的百分比,在随机间隔中,执行一个startActivity()方法调用,作为一种最大化的覆盖安装包的所有的activity的方法 **10:键盘翻转(\--pct-flip)** **11:随机\--pct-anyevent**   调整其他类型的事件的百分比,比如按键或其他不太常用到的一些事件的百分比