目录
PS:可以通过adb shell ls /system/bin/
命令获取当前设备所支持的相关命令
1 adb是什么
adb的全称为Android Debug Bridge:android调试桥梁。
1.1 adb组成
adb是一个C/S架构的应用程序,由三部分组成:
A client(运行在pc端的adb client):命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求;
A Server (运行在pc端的adb server):ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;
A demon (运行在设备端的常驻进程adb demon (adbd)):程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务;
daemon程序意思守护进程。通常在系统后台长时间运行,由于没有控制终端而无法与前台交互,daemon程序一般作为系统服务使用。daemon是静态的,就是某一程序,daemon运行后会提供某种服务,服务是动态的,是程序运行产生的进程。通常说的Linux守护进程就是指daemon或者服务。daemon的名称通常为相应的服务后加上一个d。如cron服务的daemon为crond,http服务的daemon为httpd。
1.2 adb运行原理
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。
2 adb常用命令
2.1 adb基础语法
adb [-d|-e|-s ]
参数说明:
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s <serialNumber> 指定相应 serialNumber 号的设备/模拟器为命令目标
在多个设备/模拟器连接的情况下较常用的是 -s 参数,serialNumber 可以通过 adb devices 命令获取。其中无线连接的设备格式:10.129.164.6:5555,usb格式示例cf264b8f
2.2 常用命令
实现目标 | 详细命令 |
---|---|
查看电脑连接设备 | adb devices |
导出图片 | adb pull <设备里的文件路径> [电脑上的目录] adb pull /sdcard/xxx.png . |
导入文件到设备 | adb push <电脑上的文件路径> <设备里的目录> adb push ~/sr.mp4 /sdcard/ |
获取屏幕分辨率 | adb shell wm size |
adb启动 | 启动 adb server 命令:adb start-server 一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。) 指定adb server的网络端口:adb -P <port> start-server(默认端口5037) |
adb停止 | 停止 adb server 命令:adb kill-server |
查看adb版本信息 | adb version |
以root权限执行adbd | 方法一: adb shell su 方法二: adb root 正常输出:restarting adbd as root 恢复非root权限:adb unroot |
安装应用apk | adb install [-lrtsdg] <path_to_apk> 内部原理adb install 实际是分三步完成: (1)push apk 文件到 /data/local/tmp。 (2)调用 pm install 安装。 (3)删除 /data/local/tmp 下的对应 apk 文件。 |
卸载应用apk | adb uninstall [-k] <packagename> <packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。 |
查看进程 | adb shell ps |
开启关闭wifi(需要root权限) | 开启 WiFi: adb root adb shell svc wifi enable |
2.3 模拟按键输入
(1)单个坐标
adb shell input tap <x> <y>
(2)焦点在文本框,输入文本
adb shell input text <string>
(3)滑动解锁
adb shell input swipe <x1> <y1> <x2> <y2>
(4)按键
adb shell input keyevent <keycode>
2.4 无线连接
方法一:借助ubs线
(1)将 Android 设备与要运行 adb 的电脑连接到同一个局域网
(2)将设备与电脑通过 USB 线连接
(3)让设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555
(4) 断开 USB 连接,「设置」-「关于手机」-「状态信息」-「IP地址」查看设备ip地址,连接:adb connect <device-ip-address>
(5)确认连接状态:adb devices,可以看到<device-ip-address>:5555 device
(6)断开无线连接:adb disconnect <device-ip-address>
方法二:不借助ubs线,需要 root 权限
(1)Android 设备上安装一个终端模拟器:Terminal Emulator for Android Downloads
(2)将 Android 设备与要运行 adb 的电脑连接到同一个局域网
(3)打开 Android 设备上的终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
(4)「设置」-「关于手机」-「状态信息」-「IP地址」找到ip地址,连接:adb connect <device-ip-address>
2.5 dumpsys使用
adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名需要列出当前运行的服务
(1)获取activity信息
adb shell dumpsys activity
加上-h可以获取帮助信息
获取当前处于前台的activity信息:
adb shell dumpsys activity activities
获取当前界面的UI信息,可以用:
adb shell dumpsys activity top
要获取当前界面的Activity:
adb shell dumpsys activity top | grep <activity>
(2)查看应用详细信息
adb shell dumpsys package <packagename>
(3)电池状况
adb shell dumpsys battery(可以获取到当前设备电量情况)
(4)获取设备分辨率
adb shell dumpsys display | grep DisplayDeviceInfo
(5)获取cpu信息
adb shell dumpsys cpuinfo
(6)获取内存信息
adb shell dumpsys meminfo
要获取具体应用的内存信息,可加上包名
adb shell dumpsys meminfo <packagename>
(7)获取package信息
adb shell dumpsys package
加上-h可以获取帮助信息
获取某个包的信息:
adb shell dumpsys package <pakagename>
(8)获取通知信息
adb shell dumpsys notification
(9)获取wifi信息
adb shell dumpsys wifi
可以获取到当前连接的wifi名、搜索到的wifi列表、wifi强度等
(10)获取电源管理信息
adb shell dumpsys power
(11)获取电话信息
adb shell dumpsys telephony.registry
更多命令参考:https://www.cnblogs.com/JianXu/p/5376642.html
2.6 应用管理
基本命令格式:
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
-s显示系统应用
-3显示第三方应用
grep 过滤指定字符串包名应用
显示所有应用:adb shell pm list packages
2.7 与应用交互
基础命令格式:
adb shell am <command>
command说明:
command | 用途 |
---|---|
start [options] <INTENT> | 启动 <INTENT> 指定的 Activity |
startservice [options] <INTENT> | 启动 <INTENT> 指定的 Service |
broadcast [options] <INTENT> | 发送 <INTENT> 指定的广播 |
force-stop <packagename> | 停止 <packagename> 相关的进程 |
intent示例:
参数 | 含义 |
---|---|
-a <ACTION> | 指定 action,比如 android.intent.action.VIEW |
-c <CATEGORY> | 指定 category,比如 android.intent.category.APP_CONTACTS |
-n <COMPONENT> | 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity |
实际使用示例:
调起activity
adb shell am start [options] <INTENT>
启动Activity
adb shell am start -n com.baidu.searchbox/com.baidu.searchbox.MainActivity
启动Activity并打开url
adb shell am start -n com.baidu.searchbox/com.baidu.searchbox.MainActivity -a android.intent.action.VIEW -d url
强制停止应用
adb shell am force-stop <packagename>
清除应用数据与缓存
adb shell pm clear <packagename>
2.8 top命令
top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序。
基础命令格式:
adb shell top -h
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
-m num Maximum number of processes to display. 最多显示多少个进程
-n num Updates to show before exiting. 刷新次数
-d num Seconds to wait between updates. 刷新间隔时间(默认5秒)
-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序
-t Show threads instead of processes. 显示线程信息而不是进程
-h Display this help screen. 显示帮助文档
作用:可获取CPU、VSS、RSS数据
CPU% 当前瞬时CPU占用率
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
经常用于Android端查看设备cpu和内存占用情况,监测单个应用,例如针对百度app的CPU占用率~
监测一次手百的CPU占用情况:
adb shell top -n 1 | grep com.baidu.searchbox
10秒刷新一次显示CPU占用情况:
adb shell top -d 10 | grep com.baidu.searchbox
实时监测微博的CPU占用情况:
adb shell top | grep com.baidu.searchbox
2.9 Android日志查看
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。
命令格式:
adb logcat -h
Usage: logcat [options] [filterspecs]
options include:
-s Set default filter to silent. Equivalent to filterspec '*:S'
-f <file>, --file=<file> Log to file. Default is stdout
-r <kbytes>, --rotate-kbytes=<kbytes>
Rotate log every kbytes. Requires -f option
-n <count>, --rotate-count=<count>
Sets max number of rotated logs to <count>, default 4
--id=<id> If the signature id for logging to file changes, then clear
the fileset and continue
-v <format>, --format=<format>
Sets log print format verb and adverbs, where <format> is:
brief help long process raw tag thread threadtime time
and individually flagged modifying adverbs can be added:
color descriptive epoch monotonic printable uid
usec UTC year zone
Multiple -v parameters or comma separated list of format and
format modifiers are allowed.
-D, --dividers Print dividers between each log buffer
-c, --clear Clear (flush) the entire log and exit
if Log to File specified, clear fileset instead
-d Dump the log and then exit (don't block)
-e <expr>, --regex=<expr>
Only print lines where the log message matches <expr>
where <expr> is a Perl-compatible regular expression
-m <count>, --max-count=<count>
Quit after printing <count> lines. This is meant to be
paired with --regex, but will work on its own.
--print Paired with --regex and --max-count to let content bypass
regex filter but still stop at number of matches.
-t <count> Print only the most recent <count> lines (implies -d)
-t '<time>' Print most recent lines since specified time (implies -d)
-T <count> Print only the most recent <count> lines (does not imply -d)
-T '<time>' Print most recent lines since specified time (not imply -d)
count is pure numerical, time is 'MM-DD hh:mm:ss.mmm...'
'YYYY-MM-DD hh:mm:ss.mmm...' or 'sssss.mmm...' format
-g, --buffer-size Get the size of the ring buffer.
-G <size>, --buffer-size=<size>
Set size of log ring buffer, may suffix with K or M.
-L, --last Dump logs from prior to last reboot
-b <buffer>, --buffer=<buffer> Request alternate ring buffer, 'main',
'system', 'radio', 'events', 'crash', 'default' or 'all'.
Additionally, 'kernel' for userdebug and eng builds, and
'security' for Device Owner installations.
Multiple -b parameters or comma separated list of buffers are
allowed. Buffers interleaved. Default -b main,system,crash.
-B, --binary Output the log in binary.
-S, --statistics Output statistics.
-p, --prune Print prune white and ~black list. Service is specified as
UID, UID/PID or /PID. Weighed for quicker pruning if prefix
with ~, otherwise weighed for longevity if unadorned. All
other pruning activity is oldest first. Special case ~!
represents an automatic quicker pruning for the noisiest
UID as determined by the current statistics.
-P '<list> ...', --prune='<list> ...'
Set prune white and ~black list, using same format as
listed above. Must be quoted.
--pid=<pid> Only prints logs from the given pid.
--wrap Sleep for 2 hours or when buffer about to wrap whichever
comes first. Improves efficiency of polling by providing
an about-to-wrap wakeup.
filterspecs are a series of
<tag>[:priority]
where <tag> is a log component tag (or * for all) and priority is:
V Verbose (default for <tag>)
D Debug (default for '*')
I Info
W Warn
E Error
F Fatal
S Silent (suppress all output)
使用示例:adb logcat *:W
Android 的日志分为如下几个优先级(priority):
- V —— Verbose(最低,输出得最多)
- D —— Debug I —— Info
- W —— Warning
- E —— Error
- F—— Fatal
- S —— Silent(最高,啥也不输出)
日志格式:
adb logcat -v <format>
Format示例如下:
- brief—— <priority>/<tag>(<pid>): <message>
- process—— <priority>(<pid>) <message>
- tag—— <priority>/<tag>: <message>
- raw—— <message>
- time—— <datetime> <priority>/<tag>(<pid>): <message>
- threadtime—— <datetime> <pid> <tid> <priority> <tag>: <message>
- long—— [ <datetime> <pid>:<tid> <priority>/<tag> ] <message>
清除日志:adb logcat -c
2.10 实用功能
(1)屏幕截图
截图保存到电脑:
adb exec-out screencap -p > sc.png
截图保存到设备:
adb shell screencap -p /sdcard/sc.png
-p参数:指定保存文件为 png 格式
(2)录制屏幕
录制屏幕以mp4格式保存到/sdcard(默认录制时间和最长录制时间都是180秒):
adb shell screenrecord /sdcard/filename.mp4
(3)刷机相关命令
重启手机:adb reboot
重启到Recovery模式:adb shell recovery
重启到 Fastboot 模式:adb reboot bootloader
通过 sideload 更新系统:adb sideload <path-to-update.zip>
(4)使用Monkey进行压力测试
Monkey可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试
基础命令格式:
adb shell monkey -c <main-category> <event-count>
详细参数说明:
基本参数 | 说明 |
---|---|
-p <allowed-package-name> | 指定一个或多个包 |
-s <seed> | 指定一个随机数生成器的seed值 |
--throttle <milliseconds> | 指定事件之间的固定延迟(ms) |
-v | 指定反馈信息级别(信息级别就是日志的详细程度) |
-c <main-category> | 指定一个或多个类别名 |
-f <scriptfile> | 运行指定的monkey脚本 |
事件参数 | 说明 |
---|---|
--pct-touch <percent> | 指定触摸事件百分比 |
--pct-motion <percent> | 指定动作事件百分比 |
--pct-trackball <percent> | 指定轨迹事件百分比 |
--pct-syskeys <percent> | 指定系统按键事件百分比 |
--pct-nav <percent> | 指定基本导航事件百分比 |
--pct-majornav <percent> | 指定主要导航事件百分比 |
--pct-appswitch <percent> | 指定应用启动事件百分比 |
--pct-flip <percent> | 指定flip(弹)事件的百分比 |
--pct-anyevent <percent> | 指定其他类型事件百分比 |
--pct-pinchzoom <percent> | 指定缩放(捏)事件百分比 |
--pct-permission <percent> | 指定权限许可事件百分比 |
禁止命令:adb shell settings put global policy_control immersive.full=*为防止执行向下滑动的命令时,容易打开通知栏,进行其他无关操作,我们需要在执行monkey命令之前,先执行禁用通知栏的命令
解禁命令:adb shell settings put global policy_control null
monkey使用示例
adb shell monkey -p com.xiaomi.sc -v -v -v --throttle 200 -s 1 --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 30 100000 2>/Users/admin/Desktop/error.txt 1>/Users/admin/Desktop/info.txt
参数说明如下:
参数 | 说明 |
---|---|
-p com.xiaomi.sc | 测试app对象包名 |
-v -v -v | 打印日志level0:-v 缺省值,仅提供启动结束信息level1:-v -v 表示打印较详细日志,包括发送到activity的信息level2:-v -v -v 表示打印最详细日志,包括测试未选中的activity信息 |
--throttle 200 | 事件之间间隔200ms |
-s 1 | 伪随机数生成器,seed值为1,相同seed值再次执行monkey将产生相同的时间序列 |
--ignore-crashes | 忽略应用程序崩溃,继续发送执行事件直到事件数执行完成 |
--ignore-timeouts | 忽略应用程序发生的anr错误,直到事件数执行完成 |
--ignore-native-crashes | 忽略android native-code引起的崩溃,直到事件数执行完成 |
--pct-touch 30 | 指定触摸事件占比30% |
100000 | 执行100000次事件 |
2>/Users/admin/Desktop/error.txt | level2错误日志保存到桌面的error.txt文件 |
1>/Users/admin/Desktop/info.txt | level1信息日志保存到桌面的info.txt文件 |
monkey日志抓取
- 保存在PC中:
adb shell monkey [option] <count> > d:\monkey.txt
- 保存在手机中:
adb shell monkey [option] <count> > /mnt/sdcard/monkey.txt // 日志会保存在手机SD卡上的一个monkey.txt文件中
- 标注流与错误留分开保存:
Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt // Monkey 的运行日志和异常日志被开保存
monkey日志分析
- 程序无响应的情况:搜索关键字
ANR
- 进入 adb shell:
adb shell
- 进入 anr 目录:
cd data/anr
- 查看
traces.txt
- 提取
traces.txt
文件:adb pull /data/anr/traces.txt
- 进入 adb shell:
- 崩溃、闪退的情况 1:搜索关键字
CRASH
- 崩溃、闪退的情况 2:搜索关键字
Exception
- 内存溢出的情况:搜索关键字
OOM
- 测试成功的情况:搜索关键字
Monkey finished
2.11 其他
内核日志:adb shell dmesg
查看设备信息:adb shell getprop
查看设备信息型号:adb shell getprop ro.product.model
android系统版本:adb shell getprop ro.build.version.release
CPU信息:adb shell cat /proc/cpuinfo
内存信息:adb shell cat /proc/meminfo
更多详细内容参考:
https://blog.csdn.net/LetsStudy/article/details/89077524
https://www.cnblogs.com/hejing-swust/p/7762240.html
https://www.cnblogs.com/nullnullnull/p/11114409.html
特别说明
本文整合自网络,仅供学习使用!
参考:https://blog.csdn.net/zhonglunshun/article/details/78362439