APP专项测试-ADB命令
前言
APP测试相对于WEB、H5等网页测试来说,多了专项测试,每一块的测试点,都很多且重要,本文这里介绍的是ADB命令;
ADB命令,adb的全称为Android Debug Bridge,就是起到调试桥的作用。adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的android设备;它的主要功能有:
APP性能测试、闪退、安装卸载、上传下载、日志查看等操作,所以做APP等移动端测试开发的同学可以看看。
一、小白使用教程
1、写ADB命令之前:需要先准备ADB的应用程序,可以在网上去下载,有需要的同学,也可以留言;首先需要记住包存放的路径:
2、通过CMD命令,进入adb程序路径位置
3、这个时候,我们就可以开始链接设备了,目前设备分为两种,模拟器和真机:
3.1、先说模拟器的链接方法:
先在电脑上下载并打开模拟器,比如MuMu模拟器:常规端口号是:7555(个别设备如果不对,可以在MuMu的右上角问题诊断里边看到端口号)
语法:adb connect IP地址:端口号
例:adb connect 127.0.0.1:7555
(注:127.0.0.1代表自己电脑)
执行完命令后,可以通过adb devices,来查看链接的设备列表;
3.2、真机连接
真机,不用connect了,最简单的方法是,通过数据线,直接链接到电脑,然后手机上选择以媒体传输方式作为USB链接方式,另外,手机需要打开USB调试模式;这些步骤昨晚以后,就可以直接 执行命令:adb devices 来查看是否连接成功;
二、尽可能全面的整理了各类型ADB命令。
/* /* 一.连接命令 连接某台设备 adb connect ip:port 断开某台设备连接 adb disconnect ip:port 查看设备 adb devices 通过 IP 地址连接到设备 adb connect your_ip:5555 断开设备连接 adb disconnect your_ip:5555 如果有多个设备连接,想对其中的某一设备进行操作,就需要在此命令的后面加参数 adb [-d|-e|-s <serial Number>] <command> -d:真机(多个设备中只有一个真机时适用) -e:模拟器(多个设备中只有一个模拟器时适用) -s:序列号 有两个真机连接了我的电脑,进入其中一台 adb -s 设备ID shell 二.查询类命令 打印默认日志数据 adb logcat 需要打印日志详细时间的简单数据 adblogcat-v time 需要打印级别为Error的信息 adb logcat*:E 需要打印时间和级别的Error信息 adb logcat -v time *:E 将日志保存到电脑D:\log.txt adb logcat | findstr "Fail" adb打印日志具体时间范围 adb logcat com.og.danjidzz -v time *:E sed -n '/2022/04/15','2022/04/16/p' 查看设备log,和studio和eclipse的logcat相同,可通过参数控制输出的日志 adb logcat -s 过滤指定参数log -v time 保留日志时间 >> 追加写 > 覆盖写 查询是否已连接的设备 adb devices 查询连接设备状态 adb get-state 查询设备已安装的应用1 adb shell pm list package -s 列出系统应用 adb shell pm list package -3 列出三方应用 adb shell pm list package -i 列出来源 adb shell pm list package -f 列出包名和路径 adb shell pm path com.kugou.android 列出应用所在的路径 查看前台应用包名 adb shell dumpsys window | findstr mCurrentFocus 获取安卓系统版本号 adb shell getprop ro.build.version.release 获取安卓api版本 adb shell getprop ro.bulid.version.sdk 获取手机分辨率 adb shell wm size 查看手机系统支持那些adb命令 adb shell ls /system/bin 获取IP命令 adb shell ip addr show adb shell ifconfig adb shell getprop 查询系统支持的所有服务信息 adb shell dumpsys -l 查询指定服务信息 adb shell dumpsys window #dumpsys window命令帮助信息 dumpsys window -h #查看上一次ANR信息() dumpsys window l #查看Window策略状态 dumpsys window p #查看Window的动画状态 dumpsys window a #查看Window的活动会话 dumpsys window s #查看Window的活跃的显示内容 dumpsys window d #查看Window的token列表 dumpsys window t #查看Window列表 dumpsys window w #获取当前活动的包名和类名 dumpsys window | grep mCurrentFocus 例如:查看当前界面的activity 获取Activity信息过滤出最后一条记录,也就是当前界面(顶层top)activity dumpsys activity top | grep ACTIVITY | tail -n 1 获取当前activity dumpsys window w | grep name= 查看Fragment栈信息 dumpsys activity top | grep '#0: ' 查看当前界面的Fragment dumpsys activity top | grep '#0: ' | tail -n 1 查看设备名称,豌豆荚等应用就是通过此来获得设备的名称 adb shell cat /system/build.prop/ 查看手机分辨率有两种方法,第二种方法最为简洁 adb shell dumpsys window | grep Surface 查看手机sdk版本 adb shell getprop | grep version 查看手机型号信息 adb shell getprop | grep product 获取序列号,获取到的序列号即为adb devices列出来的序列号 adb get-serialno 查看连接的设备 adb devices 三.APP应用操作类 安装新的apk adb install demo.apk 安装apk pm install -r /data/local/tmp/test.apk -l:锁定应用程序 -r:重新安装应用,且保留应用数据 -t:允许测试apk被安装 -i <INSTALLER_PACKAGE_NAME>:指定安装包的包名 -s:安装到sd卡 -f:安装到系统内置存储中(默认安装位置) -d:允许降级安装(同一应用低级换高级) -g:授予应用程序清单中列出的所有权限(只有6.0系统可用) 覆盖安装apk adb install -r demo.apk 降级安装apk adb install -d demo.apk 卸载apk adb uninstall demo.apk 可选参数-k的作用为卸载软件但是保留配置和缓存文件 卸载apk保留数据 adb uninstall -k demo.apk 清除应用缓存 adb shell pm clear demo.apk 查看app相关所有信息,包括action,codepath,version,需要的权限等等信息 adb shell dumpsys package <package_name> 查看app的路径 adb shell pm path <package_name> 查看apk的版本信息 adb shell dumpsys package <package_name> | grep version 列出设备所有应用包名 pm list PACKAGE_NAME [options] * -f: 显示包名所关联的文件; * -d: 只显示disabled包名; * -e: 只显示enabled包名; * -s: 只显示系统包名; * -3: 只显示第3方应用的包名; * -i: 包名所相应的installer; * -u: 包含uninstalled包名. 获取指定包名的apk路径 pm path PACKAGE_NAME 输出apk信息 pm dump PACKAGE_NAME 权限查询 pm list permissions [options] -g:按组进行列出权限 -f:打印所有信息 -s:简短的摘要 -d:只有危险的权限列表 -u:只有权限的用户将看到列表 清除应用数据 pm clear <PACKAGE_NAME> 启用应用 pm enable <PACKAGE_NAME> 禁用应用 pm disable <PACKAGE_NAME> 启动一个应用 adb shell am start com.cubic.autohome/com.cubic.autohome.MainActivity 启动指定的activity adb shell am start -n com.cubic.autohome/com.cubic.autohome.MainActivity 先停止应用在启动应用 adb shell am start -S com.cubic.autohome/com.cubic.autohome.MainActivity 启动一个应用等待页面加载完成 adb shell am start -W com.cubic.autohome/com.cubic.autohome.MainActivity 强制关闭app adb shell am force-stop com.cubic.autohome 四.启动关闭服务类 启动adb服务 adb start-server 关闭adb服务 adb kill-server 进入adb运行环境 adb shell 获取帮助 里面有adb的各种命令和参数的介绍 adb help 查看adb版本 adb version 以root权限重启adb adb root 将system分区重新挂在为可读写分区 adb remount 查看运行中程序进程号 adb shell ps | findstr com.cubic.autohome 杀死运行中的进程 adb shell kill 11567(需要root权限,建议使用force-stop杀死报名) 查看某个app的进程相关信息 adb shell ps | grep <package_name> 杀掉某个进程,一般用于模拟某个bug复现 adb shell kill pidNumber 查看某一个app的内存占用 adb shell dumpsys meminfo <package_name|PID> 查看单个应用程序的最大内存限制 adb shell getprop | grep heapgrowthlimit 五.对设备操作类 根据被占用的端口,查看进程号 netstat -ano | findstr “5037” 根据进程号,查看应用 tasklist | findstr “7488” 重启设备,可选参数进入bootloader(刷机模式)或recovery(恢复模式) adb reboot [bootloader|recovery] 获取单个应用的电量消耗信息 adb shell dumpsys batterystats > <package_name> > xxx.txt 查看wifi密码(需要root权限) adb shell cat data/misc/wifi/*.conf 查看wifi_mac adb shell cat /sys/class/net/wlan0/address 查看后台services信息 adb shell service list 查看系统当前内存占用,为综述 adb shell cat /proc/meminfo 查看各进程详细内存占用和系统的内存占用 adb shell dumpsys meminfo 查看各进程内存的另一方法 不是所有设备都支持 adb shell procrank 查看设备上进程的cpu和内存占用情况 adb shell top 查看系统耗电情况 adb shell dumpsys batterystats > xxx.txt 查看系统设置的闹钟 adb shell dumpsys alarm 查看系统的wakelock,不合理的使用wakelock会导致系统耗电加剧 adb shell dumpsys power 截图保存到指定位置 adb shell screencap -p /sdcard/jietu.png 录制视频并保存到指定位置 adb shell screenrecord -size 1080*2400 -time-limit 600 /sdcard/luping.mp4 休眠 adb shell input keyevent KEYCODE_SLEEP 唤醒(也是电源键的意思) adb shell input keyevent KEYCODE_POWER 六、文件操作相关 拷贝文件/目录到设备 adb push <local>...<remote> 从设备拷贝文件/目录,-a参数保留了文件的时间戳和模式 adb pull [-a] <remote>...<local> 创建目录 adb shell mkdir path/folder 列出目录下的文件和文件夹,可选参数-al可查看文件和文件夹的详细信息 adb shell ls [-al] 进入文件夹 adb shell cd <folder> 查看文件 adb shell cat <filename> 重命名文件 adb shell rename path/oldfilename path/newfilename 删除文件/文件夹 adb shell rm path/filename -r 可选参数用于删除文件夹及下面的所有文件 eg:adb shell rm -r <folder> 移动文件 adb shell mv path/filename newpath/filename 拷贝文件 adb shell cp file newpath/file1 设置文件最高读写权限 adb shell chmod 777 filename 手机未root 查看data/data/某一app文件信息 run-as package_name 从本地上传文件到手机 adb push H:\jietu.png /sdcard/music 从手机下载文件到本地 adb pull /sdcard/picture.png H:\wenjianjia */ */
三、Monke命令详细教程:
/* Monkey是Android SDK提供的一个命令行工具,它可以运行在模拟器里或实际设备中,它会向系统发送随机的用户事件流(如按键、触摸屏移动、手势),实现对正在开发的应用进行压力测试。 基本命令 adb shell monkey [options] <event-count> 例如,要在设备上随机发送500个随机事件,可以使用以下命令: adb shell monkey -v 500 常用选项 -v:设置反馈信息的级别,一共有三个级别,分别是-v,-vv,-vvv。 --throttle:设置用户事件之间的时间延迟(毫秒),如adb shell monkey --throttle 1000 -v 500。 --pct-touch:设置触摸事件的百分比,如adb shell monkey --pct-touch 100 -v 500。 --pct-motion:设置动作事件的百分比,如adb shell monkey --pct-motion 100 -v 500。 --pct-trackball:设置轨球事件的百分比,如adb shell monkey --pct-trackball 100 -v 500。 --pct-nav:设置导航事件的百分比,如adb shell monkey --pct-nav 100 -v 500。 --pct-majornav:设置主要导航事件的百分比,如adb shell monkey --pct-majornav 100 -v 500。 --pct-syskeys:设置系统按键事件的百分比,如adb shell monkey --pct-syskeys 100 -v 500。 --pct-appswtich:设置启动Activity的百分比,如adb shell monkey --pct-appswtich 100 -v 500。 --pct-anyevent:设置其他类型事件的百分比,如adb shell monkey --pct-anyevent 100 -v 500。 --pkg-blacklist:设置不包含的应用包名,如adb shell monkey --pkg-blacklist com.example.one -v 500。 --pkg-whitelist:设置包含的应用包名,如adb shell monkey --pkg-whitelist com.example.one -v 500。 --wait-dbg:等待调试器,如adb shell monkey --wait-dbg -v 500。 示例 随机发送500个事件,并设置事件之间的延迟为500毫秒,不包含com.example.one应用的事件,并且设置各类事件的百分比: adb shell monkey --throttle 500 --pkg-blacklist com.example.one --pct-touch 50 --pct-motion 25 --pct-trackball 10 --pct-nav 5 --pct-majornav 2 --pct-syskeys 2 --pct-appswtich 1 --pct-anyevent 100 -v 500 日志等级 Monkey测试完成后,会输出测试的总结报告,如果你想看到更详细的日志信息,可以通过设置日志等级来实现。 -v:基本日志信息,包括启动、测试完成和最终结果。 */
四、部分基础命令详细教程
/* 基础命令教程: 在设备上启用 adb 调试 如要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。 您可以通过 adb devices 来验证设备是否已连接。如果已连接,您将看到设备名称以“设备”形式列出。 注意:当您连接搭载 Android 4.2.2(API 级别 17)或更高版本的设备时,手机系统会显示一个对话框,询问您是否接受允许通过此计算机进行调试的 RSA 密钥。这种安全机制可以保护用户设备,需要确认。 首次连接 USB 后,与设备进行无线连接(此方案仅适用于 Android 10 及更低版本) 注意:此工作流也适用于 Android 11(及更高版本),需要注意的是,它还涉及通过物理 USB 进行的 *初始* 连接。 注意:以下说明不适用于搭载 Android 10(API 级别 29)或更低版本的 Wear 设备。如需了解详情,请参阅调试 Wear OS 应用指南。 一般情况下,adb 通过 USB 与设备进行通信,但您也可以通过 Wi-Fi 使用 adb。若要连接到搭载 Android 10(API 级别 29)或更低版本的设备,请通过 USB 执行以下初始步骤: 将 Android 设备和 adb 主机连接到同一 Wi-Fi 网络。 注意:并非所有接入点都适用。您可能需要使用防火墙已正确配置为支持 adb 的接入点。 使用 USB 线将设备连接到主机。 设置目标设备以监听端口 5555 上的 TCP/IP 连接: adb tcpip 5555 拔掉连接目标设备的 USB 线。 找到 Android 设备的 IP 地址。例如,对于 Nexus 设备,您可以在设置 > 关于平板电脑(或关于手机)> 状态 > IP 地址下找到 IP 地址。 通过 IP 地址连接到设备: adb connect device_ip_address:5555 确认您的主机已连接到目标设备: $ adb devices List of devices attached device_ip_address:5555 device 您的设备现已连接到 adb。 如果与设备的 adb 连接断开: 确保主机仍与 Android 设备连接到同一 Wi-Fi 网络。 通过再次执行 adb connect 步骤重新连接。 如果这样无法解决问题,请重置您的 adb 主机: adb kill-server 然后,从头开始操作。 查询设备 在发出 adb 命令之前,了解哪些设备实例已连接到 adb 服务器会很有帮助。您可以使用以下 devices 命令生成已连接设备的列表: adb devices -l 作为响应,adb 会针对每个设备输出以下状态信息: 序列号:adb 会创建一个字符串,用于通过端口号唯一标识设备。下面是一个序列号示例:emulator-5554 状态:设备的连接状态可以是以下几项之一: offline:设备未连接到 adb 或没有响应。 device:设备已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。系统完成启动后,设备通常处于此运行状态。 no device:未连接任何设备。 说明:如果您加入 -l 选项,devices 命令会告知您设备是什么。当您连接了多个设备时,此信息会很有用,方便您区分这些设备。 以下示例展示了 devices 命令及其输出。有三个设备正在运行。列表中的前两行表示模拟器,第三行表示连接到计算机的硬件设备。 $ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo 将命令发送至特定设备 如果有多个设备在运行,您在发出 adb 命令时必须指定目标设备。如需指定目标,请按以下步骤操作: 使用 devices 命令获取目标设备的序列号。 获得序列号后,结合使用 -s 选项与 adb 命令来指定序列号。 如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL 环境变量设为包含序列号。 如果您同时使用 -s 和 $ANDROID_SERIAL,-s 会替换 $ANDROID_SERIAL。 在以下示例中,先获得了已连接设备的列表,然后使用其中一个设备的序列号在该设备上安装了 helloWorld.apk: $ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk 注意:如果您在多台设备可用时发出命令但未指定目标设备,adb 会显示错误“adb: more one device/emulator”。 如果有多个可用设备,但只有一个是模拟器,请使用 -e 选项将命令发送至该模拟器。如果有多个设备,但只连接了一个硬件设备,请使用 -d 选项将命令发送至该硬件设备。 安装应用 您可以使用 adb 的 install 命令在模拟器或连接的设备上安装 APK: adb install path_to_apk 安装测试 APK 时,必须在 install 命令中使用 -t 选项。如需了解详情,请参阅 -t。 如需安装多个 APK,请使用 install-multiple。如果您从 Play 管理中心为应用下载特定设备的所有 APK,并希望将这些 APK 安装到模拟器或实体设备上,那么此设置会非常有用。 设置端口转发 您可以使用 forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机端口 6100 到设备端口 7100 的转发: adb forward tcp:6100 tcp:7100 以下示例设置了主机端口 6100 到 local:logd 的转发: adb forward tcp:6100 local:logd 将文件复制到设备以及从设备复制文件 您可以使用 pull 和 push 命令将文件复制到设备或从设备复制文件。与 install 命令(仅将 APK 文件复制到特定位置)不同,使用 pull 和 push 命令可将任意目录和文件复制到设备中的任何位置。 如需从设备中复制某个文件或目录(及其子目录),请使用以下命令: adb pull remote local 如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令: adb push local remote 将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如: adb push myfile.txt /sdcard/myfile.txt 停止 adb 服务器 在某些情况下,您可能需要终止 adb 服务器进程,然后重启才能解决问题。例如,如果 adb 不响应命令,就可能会发生这种情况。 如需停止 adb 服务器,请使用 adb kill-server 命令。然后,您可以通过发出其他任何 adb 命令来重启服务器。 发出 shell 命令 您可以使用 shell 命令通过 adb 发出设备命令,也可以使用该命令启动交互式 shell。如需发出单个命令,请使用如下所示的 shell 命令: adb [-d |-e | -s serial_number] shell shell_command 要在设备上启动交互式 shell,请使用如下所示的 shell 命令: adb [-d | -e | -s serial_number] shell 如需退出交互式 shell,请按 Control+D 或输入 exit。 Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令: adb shell ls /system/bin 调用 activity 管理器 在 adb shell 中,您可以使用 activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。 在 shell 中,相应的 am 语法为: am command 您也可以直接从 adb 发出 activity 管理器命令,无需进入远程 shell。例如: adb shell am start -a android.intent.action.VIEW 调用软件包管理器 (pm) 在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。 在 shell 中,相应的 pm 语法为: pm command 您也可以直接从 adb 发出软件包管理器命令,无需进入远程 shell。例如: adb shell pm uninstall com.example.MyApp 截取屏幕截图 screencap 命令是一个用于对设备显示屏截取屏幕截图的 shell 实用程序。 在 shell 中,相应的 screencap 语法为: screencap filename 如需从命令行使用 screencap,请输入以下命令: adb shell screencap /sdcard/screen.png 以下屏幕截图会话示例展示了如何使用 adb shell 截取屏幕截图,以及如何使用 pull 命令从设备下载屏幕截图文件: $ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png 录制视频 screenrecord 命令是一个用于录制设备(搭载 Android 4.4 [API 级别 19] 及更高版本)显示屏的 shell 实用程序。该实用程序将屏幕 activity 录制为 MPEG-4 文件。您可以使用此文件创建宣传视频或培训视频,或将其用于调试或测试。 在 shell 中,使用以下语法: screenrecord [options] filename 如需从命令行使用 screenrecord,请输入以下命令: adb shell screenrecord /sdcard/demo.mp4 按 Ctrl+C 停止屏幕录制。否则,到三分钟或 --time-limit 设置的时间限制时,录制将自动停止。 如需开始录制设备屏幕,请运行 screenrecord 命令以录制视频。然后,运行 pull 命令以将视频从设备下载到主机。下面是一个录制会话示例: $ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4 screenrecord 实用程序能以您要求的任何支持的分辨率和比特率进行录制,同时保持设备显示屏的宽高比。默认情况下,该实用程序以本机显示分辨率和屏幕方向进行录制,时长不超过三分钟。 screenrecord 实用程序的局限性: 音频不与视频文件一起录制。 无法在搭载 Wear OS 的设备上录制视频。 某些设备可能无法以它们的本机显示分辨率进行录制。如果在录制屏幕时出现问题,请尝试使用较低的屏幕分辨率。 不支持在录制时旋转屏幕。如果在录制期间屏幕发生了旋转,则部分屏幕内容在录制时将被切断。 读取应用的 ART 配置文件 从 Android 7.0(API 级别 24)开始,Android 运行时 (ART) 会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能。您可以检查收集的配置文件,了解在应用启动期间,系统频繁执行了哪些方法和使用了哪些类。 注意:您必须拥有对文件系统的 root 权限(例如在模拟器上),才能检索执行配置文件的文件名。 要生成文本格式的配置文件信息,请使用以下命令: adb shell cmd package dump-profiles package 要检索生成的文件,请使用: adb pull /data/misc/profman/package.prof.txt */
结语
亲爱的朋友:
希望本文中描述的问题以及解决方案,可以帮助到您。当然,我们深知,问题和挑战总是层出不穷,新的情况也在不断涌现。如果读者朋友您有更好的方案,或者在实际应用中发现了文中的不足之处,请不吝分享您的宝贵建议。诚挚地邀请每一位读者加入我们的行列,共同完善这份教程。
感谢您的阅读与支持!
Dear frends,
We hope that the questions and solutions presented in this article can
be of assistance to you. Of course, we are fully aware that problems and
challenges are always emerging in an endless stream, and new situations
are constantly arising. If you, our readers, have better solutions or
have discovered any deficiencies in this article through practical
application, please do not hesitate to share your valuable suggestions
with us. We sincerely invite every reader to join us in continuously
improving this tutorial.
Thank you for your reading and support!
See you,Parting is for better meeting!