一、adb基础命令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb version | 查看 adb 版本 | ||
| adb help | 查看 adb 支持的所有命令 | ||
| adb start-server | 启动 adb 服务 | ||
| adb kill-server | 停止 adb 服务 | ||
| adb devices | 查看当前连接的设备 | ||
| adb connect | 用来连接设备 | ||
| adb bugreport | 查看bug报告 |
二、adb权限命令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb root | 获取 Android 管理员(root 用户)的权限 | ||
| adb shell | 登录设备的 shell(内核),登录 shell 后可以使用 cd、ls、rm 等 Linux 命令 | ||
| adb remount | 获取 System 分区可写权限,需要获取 Android 管理员(root 用户)的权限后才能获取这个权限 | ||
| adb reboot | 重启手机 | ||
| adb reboot recovery | 重启到Recovery界面,即恢复模式 | ||
| adb remount | 重新挂载文件系统 | ||
| adb shell top -n 1 | 刷新一次内存信息,然后返回 |
三、adb关于apk的 操作指令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb shell pm list packages | 显示所有包名 | ||
| adb shell pm list packages –s | 显示系统应用包名 | ||
| adb shell pm list packages -3 | 显示第三方应用包名 | ||
| adb install <apk 文件路径 > | 将本地 apk文件(软件)安装到设备上 | ||
| adb uninstall <apk 包名 > | 卸载设备上的 apk文件(软件) | ||
| adb install -r <apk 文件路径 >.apk | 重新安装该软件 | ||
| adb shell rm/system/avi.apk | 删除system/avi.apk |
四、文件操作指令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb push < 本地路径 > < 手机端路径 > | 将本地的文件(文件夹)复制到设备 | ||
| adb pull < 手机端文件 > < 本地路径 > | 把设备(手机)的文件或文件夹复制到本地(如果需要保留时间戳,需要加上[-a]) | ||
| adb shell ls [-al] | 列出目录下的文件和文件夹(可选参数-al可查看文件和文件夹的详细信息) | ||
| adb shell cd | 进入文件夹 | ||
| adb shell cat | 查看文件 | ||
| adb shell rename path/oldfilename path/newfilename | 重命名文件 | ||
| adb shell rm path/filename -r (可选参数用于删除文件夹及下面的所有文件 eg:adb shell rm -r) | 删除文件/文件夹 | ||
| adb shell mv path/filename newpath/filename | 移动文件 | ||
| adb shell cp file newpath/file1 | 拷贝文件 | ||
| adb shell mkdir path/folder | 创建目录 | ||
| adb shell chmod 777 filename | 设置文件最高读写权限 |
五、日志操作指令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb logcat -v time > 日志保存路径 | 输出实时日志并保存在本地文件,通过 Ctrl+C 来停止。抓取日志的步骤:输入命令启动日志 -> 然后操作 App -> 复现 bug -> 停止抓取日志 -> 分析本地保存的文件 | ||
| adb bugreport > 日志保存路径 | 输入指令后开始抓取 Log,不需要按 Ctrl+C 来停止,会自动化停止 Log 打印并将日志文件保存在本地。抓取日志的步骤:主要抓取执行命令时往前 10 分钟左右的日志信息,所以在出现 bug 后立即采用此方法才有效,问题出现时间太长不建议使用此方法 | ||
| adb logcat -c | 清除log缓存 |
六、系统操作指令
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb shell getprop ro.product.model | 获取设备型号 | ||
| adb shell getprop ro.build.version.release | 获取设备 Android 系统版本 | ||
| adb get-serialno | 获取设备的序列号(设备号) | ||
| adb shell wm size | 获取设备屏幕分辨率 | ||
| adb shell screencap -p 截图在设备内的路径 | 设备屏幕截图 | ||
| adb pull < 手机端文件 > < 本地路径 > | 将截图导出到本地 | ||
| adb shell screenrecord--bugreport /sdcard/xxx.mp4 | 录制设备屏幕 | ||
| adb shell uptime | 检测手机运行时间 | ||
| adb logcat -v time-s tag > xxx.log | 查看手机上的运行日志,此项可以用来查错 | ||
| adb shell amforce-stop <进程名> | 强制杀死进程 | ||
| adb shell am start-n <进程名> / | 启动指定Activity | ||
| adb shell svc wifienable | 打开wifi | ||
| adb shell svc wifidisable | 关闭wifi | ||
| adb shell cat/data/misc/wifi/*.conf | 查看wifi密码 | ||
| adb get-serialno | 获取序列号 | ||
| adb shell top | 查看设备cpu和内存占用情况 | ||
| adb shell top -m 6 | 查看占用内存前6的app | ||
| adb shell kill[pid] | 杀死一个进程 | ||
| adb shell ps | 查看进程列表 | ||
| adb shell ps -x[PID] | 查看指定进程状态 | ||
| adb shell servicelist | 查看后台services信息 | 还有另一种查看方法 | |
| adb shell procrank | 查询各进程内存使用情况 | ||
| adb shell cat/proc/meminfo | 查看当前内存占用 | ||
| adb shell cat/proc/iomem | 查看IO内存分区 | ||
| adb shell cat/system/build.prop | 获取设备名称 | ||
| adb nodaemon server | 查看哪个端口被占用 | ||
| netstat -ano findstr "<端口号>" | 提示占用该端口的进程(非0地址) | ||
| tasklist /fi “PIDeq <进程号>” | 通过pid查看所有进程 | ||
| taskkill /pid <进程号> | 杀死进程 | ||
| adb shell inputkeyevent <数值> | 模拟系统按键 | (Ctrl+点击 )跳转到“数值对应的按键”列表 | |
| adb shell dumpstate -代号 | 查看性能 | 查看性能(命令后面的代号和对应信息) |
输出当前servers信息(另一种查看当前servers信息方法)
| 命令 | 命令作用 | 命令具体操作 | 备注 |
|---|---|---|---|
| adb shell dumpsys | 输出当前servers信息 |
输出信息的开始部分就是所有运行的service
查询到运行的system service后,就可以在dumpsys后面加上service的名字,查看指定的service信息。
-
adb shell dumpsys activity
-
adb shell dumpsys cpuinfo(CPU)
-
adb shell dumpsys batterystate(电池)
-
adb shell dumpsys window(分辨率)
数值对应的按键
| 数值 | 对应按键 | 备注 |
|---|---|---|
| 0 | KEYCODE_UNKNOWN | |
| 1 | KEYCODE_MENU | |
| 2 | KEYCODE_SOFT_RIGHT | |
| 3 | KEYCODE_HOME | |
| 4 | KEYCODE_BACK | 返回系统主页 |
| 5 | KEYCODE_CALL | |
| 6 | KEYCODE_ENDCALL | |
| 7 | KEYCODE_0 | |
| 8 | KEYCODE_1 | |
| 9 | KEYCODE_2 | |
| 10 | KEYCODE_3 | |
| 11 | KEYCODE_4 | |
| 12 | KEYCODE_5 | |
| 13 | KEYCODE_6 | |
| 14 | KEYCODE_7 | |
| 15 | KEYCODE_8 | |
| 16 | KEYCODE_9 | |
| 17 | KEYCODE_STAR | |
| 18 | KEYCODE_POUND | |
| 19 | KEYCODE_DPAD_UP | |
| 20 | KEYCODE_DPAD_DOWN | |
| 21 | KEYCODE_DPAD_LEFT | |
| 22 | KEYCODE_DPAD_RIGHT | |
| 23 | KEYCODE_DPAD_CENTER | |
| 24 | KEYCODE_VOLUME_UP | 增加音量 |
| 25 | KEYCODE_VOLUME_DOWN | |
| 26 | KEYCODE_POWER | |
| 27 | KEYCODE_CAMERA | |
| 28 | KEYCODE_CLEAR | |
| 29 | KEYCODE_A | |
| 30 | KEYCODE_B | |
| 31 | KEYCODE_C | |
| 32 | KEYCODE_D | |
| 33 | KEYCODE_E | |
| 34 | KEYCODE_F | |
| 35 | KEYCODE_G | |
| 36 | KEYCODE_H | |
| 37 | KEYCODE_I | |
| 38 | KEYCODE_J | |
| 39 | KEYCODE_K | |
| 40 | KEYCODE_L | |
| 41 | KEYCODE_M | |
| 42 | KEYCODE_N | |
| 43 | KEYCODE_O | |
| 44 | KEYCODE_P | |
| 45 | KEYCODE_Q | |
| 46 | KEYCODE_R | |
| 47 | KEYCODE_S | |
| 48 | KEYCODE_T | |
| 49 | KEYCODE_U | |
| 50 | KEYCODE_V | |
| 51 | KEYCODE_W | |
| 52 | KEYCODE_X | |
| 53 | KEYCODE_Y | |
| 54 | KEYCODE_Z | |
| 55 | KEYCODE_COMMA | |
| 56 | KEYCODE_PERIOD | |
| 57 | KEYCODE_ALT_LEFT | |
| 58 | KEYCODE_ALT_RIGHT | |
| 59 | KEYCODE_SHIFT_LEFT | |
| 60 | KEYCODE_SHIFT_RIGHT | |
| 61 | KEYCODE_TAB | |
| 62 | KEYCODE_SPACE | |
| 63 | KEYCODE_SYM | |
| 64 | KEYCODE_EXPLORER | |
| 65 | KEYCODE_ENVELOPE | |
| 66 | KEYCODE_ENTER | |
| 67 | KEYCODE_DEL | |
| 68 | KEYCODE_GRAVE | |
| 69 | KEYCODE_MINUS | |
| 70 | KEYCODE_EQUALS | |
| 71 | KEYCODE_LEFT_BRACKET | |
| 72 | KEYCODE_RIGHT_BRACKET | |
| 73 | KEYCODE_BACKSLASH | |
| 74 | KEYCODE_SEMICOLON | |
| 75 | KEYCODE_APOSTROPHE | |
| 76 | KEYCODE_SLASH | |
| 77 | KEYCODE_AT | |
| 78 | KEYCODE_NUM | |
| 79 | KEYCODE_HEADSETHOOK | |
| 80 | KEYCODE_FOCUS | |
| 81 | KEYCODE_PLUS | |
| 82 | KEYCODE_MENU | |
| 83 | KEYCODE_NOTIFICATION | |
| 84 | KEYCODE_SEARCH | |
| 85 | TAG_LAST_KEYCODE |
查看性能(命令后面的代号和对应信息)
| 代号 | 对应信息 | 备注 |
|---|---|---|
| a | 设备基本信息 | |
| b | 内存使用情况 | |
| c | CPU使用情况 | |
| d | /proc文件夹中保存的系统各种实时信息,特别是内存使用方面的详细信息,如用procrank命令获取的按内存使用率情况排序的进程列表 | |
| e | 内核的一些信息 | |
| f | 进程列表 | |
| g | 各种进程中的线程列表以及各线程的堆栈信息 | |
| h | 各进程打开的文件 | |
| i | Logcat中的三个环状日志的内容,分别是系统主日志SYSTEM、事件日志EVENT和无线电日志RADIO | |
| j | 网络相关的信息 | |
| k | df命令输入的文件系统使用率信息 | |
| m | 系统中安装的应用包信息 | |
| n | dumpsys命令输出的信息 | |
| o | 正在运行的应用列表 | |
| p | 正在运行的服务列表 |
七、adb monkey常用命令参数
adb shell monkey -help
| 基本参数 | 说明 |
|---|---|
| -p | 指定一个或多个包 |
| -s | 指定一个随机数生成器的seed值 |
| --throttle | 指定事件之间的固定延迟(ms) |
| -v | 指定反馈信息级别(信息级别就是日志的详细程度) |
| -c | 指定一个或多个类别名 |
| -f | 运行指定的monkey脚本 |
| 事件参数 | 说明 |
|---|---|
| --pct-touch | 指定触摸事件百分比 |
| --pct-motion | 指定动作事件百分比 |
| --pct-trackball | 指定轨迹事件百分比 |
| --pct-syskeys | 指定系统按键事件百分比 |
| --pct-nav | 指定基本导航事件百分比 |
| --pct-majornav | 指定主要导航事件百分比 |
| --pct-appswitch | 指定应用启动事件百分比 |
| --pct-flip | 指定flip(弹)事件的百分比 |
| --pct-anyevent | 指定其他类型事件百分比 |
| --pct-pinchzoom | 指定缩放(捏)事件百分比 |
| --pct-permission | 指定 |
| 调试参数 | 说明 |
|---|---|
| --ignore-crashes | 忽略因崩溃或异常引起的停止运行 |
| --ignore-timeouts | 忽略应用发生超时错误(ANR) |
| --ignore-security-exceptions | 忽略应用发生任何权限错误 |
| --monitor-native-crashes | 监视并报告monkey运行时native code的崩溃事件 |
| --ignore-native-crashes | 忽略因native code的崩溃事件 |
| --kill-process-after-error | 在应用出错后通知系统杀死发生错误的进程 |
| --hprof | 在事件序列前后立即生成profilfing report |
| --dbg-no-events | 监视应用程序所调用的包之间的转换 |
| --wait-dbg | 暂停执行中的monkey,直到有调试器与它连接 |
停止Monkey的方法
Monkey启动后会不断地向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止。在Monkey运行过程中,即便断开与PC的连接,Monkey依然可以在手机上继续运行。
停止Monkey的方法是:直接杀掉手机上的Monkey进程。具体方法如下:
adb shell ps |grep monkey
获取到com.android.commands.monkey的进程ID
adb shell kill pid
举例:adb shell kill 30898 通过kill命令杀死对应的Monkey进程。 另外还有一种方法:adb reboot(重启手机并杀死Monkey)