当前位置:   article > 正文

【基础技术】【adb命令】adb原理与常用命令使用示例_a db技术

a db技术

目录

1 adb是什么

1.1 adb组成

1.2 adb运行原理

2 adb常用命令

2.1 adb基础语法

2.2 常用命令

2.3 模拟按键输入

2.4 无线连接

2.5 dumpsys使用

2.6 应用管理

2.7 与应用交互

2.8 top命令

2.9 Android日志查看

2.10 实用功能

2.11 其他

特别说明


PS:可以通过adb shell ls /system/bin/命令获取当前设备所支持的相关命令

1 adb是什么

adb的全称为Android Debug Bridgeandroid调试桥梁

1.1 adb组成

adb是一个C/S架构的应用程序,由三部分组成:

A client(运行在pc端的adb client):命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbdpc端的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服务的daemoncrondhttp服务的daemonhttpd

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:5555usb格式示例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 权限

1Android 设备上安装一个终端模拟器:Terminal Emulator for Android Downloads

2)将 Android 设备与要运行 adb 的电脑连接到同一个局域网

3)打开 Android 设备上的终端模拟器,在里面依次运行命令:

  1. su
  2. setprop service.adb.tcp.port 5555

4)「设置」-「关于手机」-「状态信息」-IP地址」找到ip地址,连接:adb connect <device-ip-address>

2.5 dumpsys使用

adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名需要列出当前运行的服务

(1)获取activity信息

  1. adb shell dumpsys activity
  2. 加上-h可以获取帮助信息
  3. 获取当前处于前台的activity信息:
  4. adb shell dumpsys activity activities
  5. 获取当前界面的UI信息,可以用:
  6. adb shell dumpsys activity top
  7. 要获取当前界面的Activity:
  8. 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)获取内存信息

  1. adb shell dumpsys meminfo
  2. 要获取具体应用的内存信息,可加上包名
  3. adb shell dumpsys meminfo <packagename>

(7)获取package信息

  1. adb shell dumpsys package
  2. 加上-h可以获取帮助信息
  3. 获取某个包的信息:
  4. adb shell dumpsys package <pakagename>

(8)获取通知信息

adb shell dumpsys notification

(9)获取wifi信息

  1. adb shell dumpsys wifi
  2. 可以获取到当前连接的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

实际使用示例:

  1. 调起activity
  2. adb shell am start [options] <INTENT>
  3. 启动Activity
  4. adb shell am start -n com.baidu.searchbox/com.baidu.searchbox.MainActivity
  5. 启动Activity并打开url
  6. adb shell am start -n com.baidu.searchbox/com.baidu.searchbox.MainActivity -a android.intent.action.VIEW -d url
  7. 强制停止应用
  8. adb shell am force-stop <packagename>
  9. 清除应用数据与缓存
  10. adb shell pm clear <packagename>

2.8 top命令

top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序。

基础命令格式:

  1. adb shell top -h
  2. Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
  3. -m num Maximum number of processes to display. 最多显示多少个进程
  4. -n num Updates to show before exiting. 刷新次数
  5. -d num Seconds to wait between updates. 刷新间隔时间(默认5秒)
  6. -s col Column to sort by (cpu,vss,rss,thr). 按哪列排序
  7. -t Show threads instead of processes. 显示线程信息而不是进程
  8. -h Display this help screen. 显示帮助文档

作用:可获取CPUVSSRSS数据

  1. CPU% 当前瞬时CPU占用率
  2. VSS  Virtual Set Size  虚拟耗用内存(包含共享库占用的内存)
  3. RSS  Resident Set Size 实际使用物理内存(包含共享库占用的内存)

经常用于Android端查看设备cpu和内存占用情况,监测单个应用,例如针对百度appCPU占用率~

监测一次手百的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/kmsgAndroid 的日志输出到 /dev/log

命令格式:

  1. adb logcat -h
  2. Usage: logcat [options] [filterspecs]
  3. options include:
  4. -s Set default filter to silent. Equivalent to filterspec '*:S'
  5. -f <file>, --file=<file> Log to file. Default is stdout
  6. -r <kbytes>, --rotate-kbytes=<kbytes>
  7. Rotate log every kbytes. Requires -f option
  8. -n <count>, --rotate-count=<count>
  9. Sets max number of rotated logs to <count>, default 4
  10. --id=<id> If the signature id for logging to file changes, then clear
  11. the fileset and continue
  12. -v <format>, --format=<format>
  13. Sets log print format verb and adverbs, where <format> is:
  14. brief help long process raw tag thread threadtime time
  15. and individually flagged modifying adverbs can be added:
  16. color descriptive epoch monotonic printable uid
  17. usec UTC year zone
  18. Multiple -v parameters or comma separated list of format and
  19. format modifiers are allowed.
  20. -D, --dividers Print dividers between each log buffer
  21. -c, --clear Clear (flush) the entire log and exit
  22. if Log to File specified, clear fileset instead
  23. -d Dump the log and then exit (don't block)
  24. -e <expr>, --regex=<expr>
  25. Only print lines where the log message matches <expr>
  26. where <expr> is a Perl-compatible regular expression
  27. -m <count>, --max-count=<count>
  28. Quit after printing <count> lines. This is meant to be
  29. paired with --regex, but will work on its own.
  30. --print Paired with --regex and --max-count to let content bypass
  31. regex filter but still stop at number of matches.
  32. -t <count> Print only the most recent <count> lines (implies -d)
  33. -t '<time>' Print most recent lines since specified time (implies -d)
  34. -T <count> Print only the most recent <count> lines (does not imply -d)
  35. -T '<time>' Print most recent lines since specified time (not imply -d)
  36. count is pure numerical, time is 'MM-DD hh:mm:ss.mmm...'
  37. 'YYYY-MM-DD hh:mm:ss.mmm...' or 'sssss.mmm...' format
  38. -g, --buffer-size Get the size of the ring buffer.
  39. -G <size>, --buffer-size=<size>
  40. Set size of log ring buffer, may suffix with K or M.
  41. -L, --last Dump logs from prior to last reboot
  42. -b <buffer>, --buffer=<buffer> Request alternate ring buffer, 'main',
  43. 'system', 'radio', 'events', 'crash', 'default' or 'all'.
  44. Additionally, 'kernel' for userdebug and eng builds, and
  45. 'security' for Device Owner installations.
  46. Multiple -b parameters or comma separated list of buffers are
  47. allowed. Buffers interleaved. Default -b main,system,crash.
  48. -B, --binary Output the log in binary.
  49. -S, --statistics Output statistics.
  50. -p, --prune Print prune white and ~black list. Service is specified as
  51. UID, UID/PID or /PID. Weighed for quicker pruning if prefix
  52. with ~, otherwise weighed for longevity if unadorned. All
  53. other pruning activity is oldest first. Special case ~!
  54. represents an automatic quicker pruning for the noisiest
  55. UID as determined by the current statistics.
  56. -P '<list> ...', --prune='<list> ...'
  57. Set prune white and ~black list, using same format as
  58. listed above. Must be quoted.
  59. --pid=<pid> Only prints logs from the given pid.
  60. --wrap Sleep for 2 hours or when buffer about to wrap whichever
  61. comes first. Improves efficiency of polling by providing
  62. an about-to-wrap wakeup.
  63. filterspecs are a series of
  64. <tag>[:priority]
  65. where <tag> is a log component tag (or * for all) and priority is:
  66. V Verbose (default for <tag>)
  67. D Debug (default for '*')
  68. I Info
  69. W Warn
  70. E Error
  71. F Fatal
  72. S Silent (suppress all output)

使用示例:adb logcat *:W

Android 的日志分为如下几个优先级(priority):

  1. V —— Verbose(最低,输出得最多)
  2. D —— Debug I —— Info
  3. W —— Warning
  4. E —— Error
  5. F—— Fatal
  6. S —— Silent(最高,啥也不输出)

日志格式

adb logcat -v <format>

Format示例如下:

  1. brief—— <priority>/<tag>(<pid>): <message>
  2. process—— <priority>(<pid>) <message>
  3. tag—— <priority>/<tag>: <message>
  4. raw—— <message>
  5. time—— <datetime> <priority>/<tag>(<pid>): <message>
  6. threadtime—— <datetime> <pid> <tid> <priority> <tag>: <message>
  7. 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
  • 崩溃、闪退的情况 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/287652
推荐阅读
  

闽ICP备14008679号