adb笔记

1、参考:

2、adb(android debug bridge)概念

2.1、 adb 客户端-服务器(C/S)模型

  • adb采用了 客户端-服务器(C/S)模型,包括三部分:客户端client、服务端server、守护进程daemon。其中客户端和服务端都安装在电脑,守护进程运行在手机端。
  • 工作流程:“服务端<—>客户端<—>守护进程”通讯如下图。
  • 服务端发送请求到客户端的 5037端口。
  • 客户端给服务端发送请求前会先检查端口5037是否启动,若没有启动会自动启动5037端口再发送请求。服务端会扫描当前所连接的设备。
  • 连接一个设备需要2个端口,如下图5554、5555,其中一个端口和adb建立连接,另外一个端口与控制台console(就是类似CMD的命令提示符窗口)建立连接。
  • 在这里插入图片描述

2.2、环境搭建

C:\Users\ZHUIAO>java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

C:\Users\ZHUIAO>javac -version
javac 1.8.0_144

java -version:验证 jre 版本
javac -version:验证 jdk 版本

  • 常用工具:元素定位工具tools\uiautomatorviewer、platform-tools\adb

我本地已经装了SDK,但是忘记装哪里了,可以用 软件everything 搜索 SDK的文件夹platform-tools,发现装在C:\Users\ZHUIAO\AppData\Local\Android\Sdk。

2.3、模拟器、真机

可以在真机和模拟上进行实验,模拟器:

Android Studio emulator(官方,不推荐,太大了)
genymotion(信赖网络,国外了,可能访问不了)
mumu,雷电,夜神,逍遥等第三方模拟器

手机插上数据线进行adb的连接,模拟器需要特定命令,如mumu,进入官网->点击常见问题->搜索adb即可查到:https://mumu.163.com/help/20210531/35047_951108.html,例如Windows的CMD输入:
adb_server.exe connect 127.0.0.1:7555
adb_server shell
我用的adb_server.exe就是adb.exe,所以输入:adb connect 127.0.0.1:7555

它就是用127.0.0.1:7555作为设备的名称,其他模拟器去官网找设备名即可:
在这里插入图片描述

  • 手机真机调试模式

手机需要找到 关于手机–》连点7次版本号,进入开发者模式–》回到上一级,进入开发者模式,打开USB调试
Windows的电脑还需要安装手机驱动(mac自带有),例如安装个 **手机助手,连接手机,手机助手自动就会装驱动,然后卸载手机助手即可

3、设备状态种类:adb devices

  • 3种状态:device 正常;offline连接异常,设备无响应;unauthorized未授权
  • 用adb devices,返回设备的名称、状态
C:\Users\ZHUIAO>adb devices
List of devices attached
127.0.0.1:7555  device

4、重启adb:adb kill-server

C:\Users\ZHUIAO>adb kill-server
C:\Users\ZHUIAO>adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
C:\Users\ZHUIAO>

5、adb命令格式

格式:adb [ -d | -e |-s <serialNumber> ]<command>
-d:指定当前唯一通过USB连接(因为安卓设备除了通过数据线连接,也可以通过WIFI连接)的Android设备为命令目标
-e:指定当前唯一运行的模拟器为命令目标
-s:指定响应的设备为命令目标

例如:-s指定设备,-s需要在adb后面

C:\Users\ZHUIAO>adb devices
List of devices attached
00000bf50d8e2913        device
127.0.0.1:7555  device


C:\Users\ZHUIAO>adb install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
error: more than one device/emulator
adb: error: failed to get feature set: more than one device/emulator
- waiting for device -
error: more than one device/emulator

C:\Users\ZHUIAO>adb -s 127.0.0.1:7555 install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024android2180_a...le pushed. 1.9 MB/s (269923680 bytes in 132.049s)
        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Success

6、安装/卸载apk:adb install/uninstall apk路径

安装

普通安装:adb install <apk路径>
覆盖安装/替换安装:adb install -r <apk路径>

卸载

删除配置文件、数据缓存信息:adb uninstall 包名
不删除配置文件,保存数据缓存信息:adb uninstall -k 包名
(-k参数可能需要用其他命令:adb shell pm uninstall -k,具体根据提示执行)

例如手机没有微信apk时,进行安装微信apk:

C:\Users\ZHUIAO>adb install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024android21...ushed. 2.5 MB/s (269923680 bytes in 101.027s)        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Success
C:\Users\ZHUIAO>

如果手机已经安装了apk,再安装apk就会报错,可以通过-r参数来覆盖原来的apk:

# 第一次安装成功
C:\Users\ZHUIAO>adb install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024android21...ushed. 2.5 MB/s (269923680 bytes in 101.027s)        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Success

# 已经安装,再次安装失败
C:\Users\ZHUIAO>adb install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk: 1 file pushed. 2.2 MB/s (269923680 bytes in 118.694s)
        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]

# 覆盖安装成功
C:\Users\ZHUIAO>adb install -r C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk: 1 file pushed. 2.7 MB/s (269923680 bytes in 95.636s)
        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Success

卸载

# 卸载微信,包括缓存信息,微信的包名为com.tencent.mm
C:\Users\ZHUIAO>adb uninstall com.tencent.mm
Success

# 重新安装
C:\Users\ZHUIAO>adb install C:\Users\ZHUIAO\Downloads\weixin8024android2180_arm64.apk
C:\Users\ZHUIAO\Downloads\weixin8024an... 2.9 MB/s (269923680 bytes in 88.394s)
        pkg: /data/local/tmp/weixin8024android2180_arm64.apk
Success

# 卸载微信,不包括缓存信息,可能会提示用用其他命令:adb shell pm uninstall -k
C:\Users\ZHUIAO>adb uninstall -k com.tencent.mm
The -k option uninstalls the application while retaining the data/cache.
At the moment, there is no way to remove the remaining data.
You will have to reinstall the application with the same signature, and fully uninstall it.
If you truly wish to continue, execute 'adb shell pm uninstall -k'
.
C:\Users\ZHUIAO>adb shell pm uninstall -k com.tencent.mm
Success

# 卸载后,保存在目录 /data/data/com.tencent.mm的缓存依旧存在
C:\Users\ZHUIAO>adb shell
root@x86_64:/ # cd data/data/com.tencent.mm
root@x86_64:/data/data/com.tencent.mm # ls
MicroMsg
app_cache
app_dex
app_flutter
app_font
app_lib
app_recover_lib
app_textures
app_webview
app_xwalk_-1
app_xwalkconfig
app_xwalkplugin
appbrand
cache
code_cache
databases
face_detect
files
no_backup
scan_goods
shared_prefs

7、活动页activity、包package

名词说明
包packageAndroid应用的唯一标志
活动页Android应用的页面标志,一个页面就是一个activity

7.1、查看当前活动页名:adb shell “dumpsys window | grep mCurrentFocus”

例如打开QQ的登录页面,输入命令adb shell “dumpsys window | grep mCurrentFocus”,返回包名/页面名,包名是com.tencent.mobileqq,页面名是com.tencent.mobileqq.activity.LoginActivity

C:\Users\ZHUIAO>adb shell "dumpsys window | grep mCurrentFocus"
  mCurrentFocus=Window{c06c3ee u0 com.tencent.mobileqq/com.tencent.mobileqq.activity.LoginActivity}

在这里插入图片描述

7.2、打开活动页:adb shell am start -n 活动页路径

C:\Users\ZHUIAO>adb shell am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.LoginActivity
Starting: Intent { cmp=com.tencent.mobileqq/.activity.LoginActivity }

在这里插入图片描述
注:也可以直接打开后几层的页面(例如“用手机号码注册”而不一定是登录页)在这里插入图片描述

7.3、获取启动页信息

先执行下面命令,系统会连续抓取log,然后在虚拟机中打开QQ(打开QQ前已经有一些log,与QQ启动页无关),分析打印的log就可以找到启动页的信息。
例如下面打开QQ,启动页的名字就出现在打开QQ后第一个输出的cmp后面com.tencent.mobileqq/.activity.SplashActivity。

win:adb logcat ActivityManager:I | findstr “cmp”
mac:adb logcat ActivityManager:I |findstr “cmp”

C:\Users\ZHUIAO>adb logcat ActivityManager:I | findstr "cmp"
07-25 00:21:04.320   687   687 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.mumu.launcher/.Launcher} from uid 0 on display 0
07-25 00:21:04.353   687   687 I ActivityManager: Starting provision Activity: Intent { cmp=com.android.provision/.DefaultActivity }
07-25 00:21:04.353   687   687 I ActivityManager: START u0 {cmp=com.android.provision/.DefaultActivity} from uid 1000 on display 0
07-25 00:21:04.354   687   687 I ActivityManager: Starting com.android.setting.CryptKeeper: Intent { cmp=com.android.settings/.CryptKeeper }
07-25 00:21:04.354   687   687 I ActivityManager: START u0 {cmp=com.android.settings/.CryptKeeper} from uid 1000 on display 0
07-25 00:21:04.354   687   687 I ActivityManager: Starting service: Intent { cmp=com.netease.nemu_vapi_android.nemu/com.netease.nemu_vapi_android.service.ApiService }
07-25 00:21:16.336   687   715 E ActivityManager: Reason: Broadcast of Intent { act=android.media.SCO_AUDIO_STATE_CHANGED flg=0x10000010 cmp=com.tencent.mm/.booter.BluetoothReceiver (has extras) }
07-25 00:21:24.586  1001  1001 D NetConnInfoCenter: receive broadcast Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/emulated/0 flg=0x4000010 cmp=com.tencent.mobileqq/.msf.core.NetConnInfoCenter (has extras) }, init = true
07-25 00:21:24.782   914   914 I boot_progress_receive: broadcast: Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 cmp=com.netease.nemu_vapi_android.nemu/com.netease.nemu_vapi_android.receiver.LaunchReceiver (has extras) }
07-25 00:21:32.476   914   914 I boot_progress_receive: broadcast: Intent { act=android.intent.action.USER_PRESENT flg=0x24000010 cmp=com.netease.nemu_vapi_android.nemu/com.netease.nemu_vapi_android.receiver.LaunchReceiver }
07-25 00:21:32.574   914   914 I boot_progress_receive: broadcast: Intent { act=android.intent.action.BOOT_COMPLETED flg=0x8000010 cmp=com.netease.nemu_vapi_android.nemu/com.netease.nemu_vapi_android.receiver.LaunchReceiver (has extras) }
07-25 00:21:33.869   914   914 I boot_progress_receive: broadcast: Intent { act=android.intent.action.USER_PRESENT flg=0x24000010 cmp=com.netease.nemu_vapi_android.nemu/com.netease.nemu_vapi_android.receiver.LaunchReceiver }
07-25 00:39:59.762   687   707 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mobileqq/.activity.SplashActivity bnds=[248,186][424,286]} from uid 1000 on display 0
07-25 00:40:03.305   687   726 I ActivityManager: START u0 {flg=0x40000 cmp=com.tencent.mobileqq/.activity.LoginActivity (has extras)} from uid 10034 on display 0
07-25 00:40:03.306   687   726 W ActivityManager: startActivity called from finishing ActivityRecord{dcbe48d u0 com.tencent.mobileqq/.activity.SplashActivity t2 f}; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x40000 cmp=com.tencent.mobileqq/.activity.LoginActivity (has extras) }

8、adb shell

使用adb shell可以进入手机内环境,进入内环境可以使用各种Linux命令(安卓的内核就是Linux)。

命令说明
ls列出当前目录下的文件和子目录
cd进入到特定子目录下

也可以不进入内环境,使用adb shell执行操作

命令说明
adb shell date查看当前系统时间
查看系统CPU使用情况adb shell cat /proc/cpuinfo
查看系统内存使用情况adb shell cat /proc/meminfo
查看所有应用adb shell pm list packages
查看系统自带应用adb shell pm list packages -s
查看第3方应用adb shell pm list packages -3
查看当前页面名adb shell "dumpsys window
清除应用缓存,缓存存放在/data/data/包名 下面adb shell pm clear <包名>
C:\Users\ZHUIAO>adb shell
root@x86_64:/ # cd vendor
root@x86_64:/vendor # ls
etc
lib
lib64
root@x86_64:/vendor # cd etc
root@x86_64:/vendor/etc # ls
misc
root@x86_64:/vendor/etc # exit

C:\Users\ZHUIAO>adb shell date
Mon Jul 25 22:09:04 CST 2022

C:\Users\ZHUIAO>adb shell
root@x86_64:/ # date
Mon Jul 25 22:09:11 CST 2022
root@x86_64:/ # exit
  • 查看系统信息
C:\Users\ZHUIAO>adb shell cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping        : 9
cpu MHz         : 2400.000
cache size      : 3072 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch rdseed clflushopt
bugs            :
bogomips        : 5423.99
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping        : 9
cpu MHz         : 2400.000
cache size      : 3072 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch rdseed clflushopt
bugs            :
bogomips        : 5423.99
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:


C:\Users\ZHUIAO>adb shell cat /proc/meminfo
MemTotal:        2050448 kB
MemFree:         1245196 kB
MemAvailable:    1438860 kB
Buffers:            1968 kB
Cached:           221096 kB
SwapCached:            0 kB
Active:           627668 kB
Inactive:         110156 kB
Active(anon):     517940 kB
Inactive(anon):     4668 kB
Active(file):     109728 kB
Inactive(file):   105488 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        514860 kB
Mapped:           204400 kB
Shmem:              7848 kB
Slab:              34884 kB
SReclaimable:      13084 kB
SUnreclaim:        21800 kB
KernelStack:       10112 kB
PageTables:        15360 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1025224 kB
Committed_AS:   25924808 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       47484 kB
VmallocChunk:   34359660212 kB
DirectMap4k:       24512 kB
DirectMap2M:     2072576 kB

8.1、am、pm

pm:package manager,包管理器
am:activity manager,页面的管理器

9、传输文件 pull、push

电脑文件推送到手机:adb push 电脑路径 设备路径
手机文件拉取到电脑:adb pull 设备路径 电脑路径

C:\Users\ZHUIAO>adb push C:\Users\ZHUIAO\Desktop\test.txt /sdcard
C:\Users\ZHUIAO\Desktop\test.txt: 1 file pushed.

C:\Users\ZHUIAO>adb pull /sdcard/test.txt C:\Users\ZHUIAO\Desktop\
/sdcard/test.txt: 1 file pulled.

10、日志

系统自动记录近期的一些日志,如果日志量超过缓存大小,新日志就会覆盖掉旧的日志

10.1、日志级别

日志等级说明
V明细verbose(最低优先级,最全的日志)
D调试debug(一般调试用这个)
I信息info
W警告warn
E错误error
F严重错误fatal
S无记载silent(最高优先级,全部日志都不会输出)

10.2、查看日志

命令:adb logcat

07-25 21:54:32.371303676DNativeLibraryHelper: compilePackagePattern pattern = com.tencent.tmgp.bh3 abi = x86
时间进程号子进程号日志等级NativeLibraryHelper是这条日志的tag,方便开发用来做各种区分过滤,后面就是日志具体信息
C:\Users\ZHUIAO>adb logcat
--------- beginning of system
07-25 21:54:28.241   242   242 I vold    : Vold 3.0 (the awakening) firing up
07-25 21:54:28.241   242   242 V vold    : Detected support for: exfat ext4 iso9660 ntfs vfat
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.tencent\.tmgp\.bh3 abi = x86
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.(tencent\.tmgp\.)?bilibili\.snake.* abi = armeabi-v7a
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.yinhan\.skzh\.uc abi = armeabi-v7a
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.braygame\.GunDam abi = armeabi-v7a
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.braygame\.bc\.aligames abi = armeabi-v7a

10.2.1、常用的参数:

adb logcat 打印默认日志数据
adb logcat -v time 打印时包含时间(默认是打印时间的)
adb logcat -v color 使用不同的颜色来显示每个优先级
adb logcat -f <filename> 将日志输出到手机里面的文件
adb logcat > filename 保存日志到电脑,filename就是文件在电脑的路径
adb logcat -c 清除已存在的日志
adb logcat [TAG:LEVEL ] [TAG:LEVEL ] …根据Tag标签和log等级过滤log

使用adb logcat --help可以参考logcat命令详细用法

C:\Users\ZHUIAO>adb logcat --help
Usage: logcat [options] [filterspecs]
options include:
  -s              Set default filter to silent.
                  Like specifying filterspec '*:S'
  -f <filename>   Log to file. Default is stdout
  -r <kbytes>     Rotate log every kbytes. Requires -f
  -n <count>      Sets max number of rotated logs to <count>, default 4
  -v <format>     Sets the log print format, where <format> is:

                      brief color long printable process raw tag thread
                      threadtime time usec

  -D              print dividers between each log buffer
  -c              clear (flush) the entire log and exit
  -d              dump the log and then exit (don't block)
  -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'
  -g              get the size of the log's ring buffer and exit
  -L              dump logs from prior to last reboot
  -b <buffer>     Request alternate ring buffer, 'main', 'system', 'radio',
                  'events', 'crash' or 'all'. Multiple -b parameters are
                  allowed and results are interleaved. The default is
                  -b main -b system -b crash.
  -B              output the log in binary.
  -S              output statistics.
  -G <size>       set size of log ring buffer, may suffix with K or M.
  -p              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> ...' set prune white and ~black list, using same format as
                  printed above. Must be quoted.

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)

'*' by itself means '*:D' and <tag> by itself means <tag>:V.
If no '*' filterspec or -s on command line, all filter defaults to '*:V'.
eg: '*:S <tag>' prints only <tag>, '<tag>:S' suppresses all <tag> log messages.

If not specified on the command line, filterspec is set from ANDROID_LOG_TAGS.

If not specified with -v on command line, format is set from ANDROID_PRINTF_LOG
or defaults to "threadtime"

“adb logcat -f /<文件>”的文件是放在手机端的,注意test.txt的路径是要有写入权限的,而且执行命令会一直写入test.txt,需要手动按Ctrl+C停止:

C:\Users\ZHUIAO\Desktop>adb logcat -f /sdcard/test.txt
^C
C:\Users\ZHUIAO\Desktop>adb shell
root@x86_64:/ # cd sdcard
root@x86_64:/sdcard # cat test.txt
--------- beginning of system
07-25 21:54:28.241   242   242 I vold    : Vold 3.0 (the awakening) firing up
07-25 21:54:28.241   242   242 V vold    : Detected support for: exfat ext4 iso9660 ntfs vfat
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.tencent\.tmgp\.bh3 abi = x86
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.(tencent\.tmgp\.)?bilibili\.snake.* abi = armeabi-v7a
07-25 21:54:32.371   303   676 D NativeLibraryHelper: compilePackagePattern pattern = com\.yinhan\.skzh\.uc abi = armeabi-v7a

10.2.2、 根据tag和log等级过滤:adb logcat [TAG:LEVEL ] [TAG:LEVEL ]

adb logcat "*:W"      		打印Warning及以上级别的日志,双引号可以省略
adb logcat ActivityManager:D "*:S" 	过滤tag为ActivityManager,level在Debug及以上级别的日志

注意上面第2条:这里ActivityManager:D和":S" 是2个过滤,且必须要有’:S’,表示其他标签都使用LEVEL=S等级(就是不打印出来),否则会将其他标签其他等级都打印出来。另外,ActivityManager是管理所有页面的标签,也是一个系统级别的标签

C:\Users\ZHUIAO\Desktop>adb logcat "*:W"
--------- beginning of system
07-25 21:54:33.101   696   696 E PmsDeserialize: mSerializeEnable:true
07-25 21:54:33.162   696   696 W SystemConfig: No directory /system/etc/sysconfig, skipping
07-25 21:54:33.266   696   696 W PackageManager: Library not found: /system/framework/org.apache.http.legacy.jar
07-25 21:54:33.280   696   696 W PackageManager: Library not found: /system/framework/org.apache.http.legacy.jar

C:\Users\ZHUIAO\Desktop>adb logcat ActivityManager:D "*:S"
--------- beginning of system
07-25 21:54:32.913   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = ^com\.bilibili\.priconne.*
07-25 21:54:32.913   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = ^com\.miHoYo\.Yuanshen.*
07-25 21:54:32.913   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = ^com\.tencent\.tmgp\.wuxia
07-25 21:54:32.913   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = ^com\.hermes\.br\..*
07-25 21:54:32.913   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = com\.longtugame\.yjfb.*
07-25 21:54:32.914   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = com\.ss\.android\.ugc\.aweme
07-25 21:54:32.914   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = com\.tencent\.jkchess
07-25 21:54:32.914   696   696 D ActivityManager: readPageCacheLimitWhitelistPattern pattern = .*sy\.dldlhsdj.*

10.2.3、关于log中报错(error)信息

可以参考(需要连接外网):https://developer.android.com/topic/performance/vitals/crash

例如:奔溃(crash)的信息

11、模拟触摸、键盘输入

11.1、打开指针位置

在开发者选项中找到“输入”下的“指针位置”,就可以看到屏幕上方有显示触摸位置的坐标值信息
在这里插入图片描述

11.2、adb shell input 模拟屏幕输入

命令说明
text (Default: touchscreen)文本输入,不支持中文输入,例如:
adb shell input text abcdefg
keyevent [–longpress] … (Default: keyboard)按键
tap <x> <y> (Default: touchscreen)屏幕点击坐标,例如点击(67,316)位置:
adb shell input tap 67 316
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)滑动
adb shell swipe <起点x1> /<起点y1> <终点x1> <终点y1> /<滑动时长,单位毫秒>
例如从(235,623)滑动到(235,210),滑动时长2秒:adb shell input swipe 235 623 235 210 2000
注意滑动时间过短,滑动距离可能不太准确
press (Default: trackball)按压
roll <dx> <dy> (Default: trackball)滚动

上面的x和y坐标的值可以通过上述 打开 指针位置,查看对应位置的坐标。

可通过 命令adb shell input 查看输入命令帮助文档:

C:\Users\ZHUIAO>adb shell input
Usage: input [<source>] <command> [<arg>...]

The sources are:
      mouse
      keyboard
      joystick
      touchnavigation
      touchpad
      trackball
      stylus
      dpad
      touchscreen
      gamepad

The commands and default sources are:
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

11.3、adb shell input keyevent n模拟手机按键

按键命令
返回键adb shell input keyevent 4
Home键adb shell input keyevent 3(置应用于后台运行)
音量放大adb shell input keyevent 24
音量缩小adb shell input keyevent 25

其他按键可以在这里找到(需要外网):https://developer.android.com/reference/android/view/KeyEvent
在这里插入图片描述

12、查看CPU、内存、电池使用情况

12.1、查看某个时间段cpu使用情况:adb shell dumpsys cpuinfo

下面是64974ms 到 4972ms,Load的最小值、均值和最大值,com.tencent.mm那行表示QQ的占用率为0.4%,其中0.1%是用户占用,0.2%是内核占用

C:\Users\ZHUIAO>adb shell dumpsys cpuinfo
Load: 0.29 / 0.29 / 0.31
CPU usage from 64974ms to 4972ms ago:
  6.5% 282/surfaceflinger: 0.2% user + 6.3% kernel
  0.4% 2118/com.tencent.mm: 0.1% user + 0.2% kernel / faults: 3087 minor
  0.1% 285/local_gps: 0% user + 0% kernel
  0% 1717/com.android.browser: 0% user + 0% kernel / faults: 22 minor
  0% 1862/com.tencent.mm:push: 0% user + 0% kernel / faults: 2986 minor
  0% 801/com.tencent.mobileqq:MSF: 0% user + 0% kernel / faults: 45 minor
  0% 32/kpclimitd: 0% user + 0% kernel
  0% 782/com.android.systemui: 0% user + 0% kernel / faults: 8 minor
  0% 313/opengl-gc: 0% user + 0% kernel
8.9% TOTAL: 2.6% user + 6.3% kernel + 0% iowait + 0% softirq

12.2、查看当前系统/某应用的内存:

查看当前系统的内存:adb shell dumpsys meminfo
查看某个应用的内存:adb shell dumpsys meminfo <应用名>

C:\Users\ZHUIAO>adb shell dumpsys meminfo
Applications Memory Usage (kB):
Uptime: 3768091 Realtime: 3768091

Total PSS by process:
   141276 kB: com.tencent.mm (pid 2118)
   119165 kB: com.tencent.mm:push (pid 1862)
    80793 kB: com.tencent.mobileqq:MSF (pid 801)
    60509 kB: system (pid 698)
    53432 kB: com.mumu.launcher (pid 950 / activities)
上面显示的是程序占用的内存,这里省略n行
Total PSS by OOM adjustment:
    42878 kB: Native
               10121 kB: zygote (pid 309)
                5833 kB: mediaserver (pid 300)
                3428 kB: zygote64 (pid 308)
                2751 kB: logd (pid 133)
                2094 kB: surfaceflinger (pid 282)
省略n行
    60509 kB: System
               60509 kB: system (pid 698)
    74603 kB: Persistent
               40742 kB: com.android.systemui (pid 782)
               20533 kB: com.netease.nemu_vapi_android.nemu (pid 943)
                8358 kB: com.netease.nemu_vinput.nemu (pid 898)
                4970 kB: com.mumu.audio (pid 922)
    53432 kB: Foreground
               53432 kB: com.mumu.launcher (pid 950 / activities)
   341234 kB: B Services
              141276 kB: com.tencent.mm (pid 2118)
              119165 kB: com.tencent.mm:push (pid 1862)
               80793 kB: com.tencent.mobileqq:MSF (pid 801)
    93100 kB: Cached
               29339 kB: com.mumu.acc (pid 1137)
               26737 kB: com.mumu.store (pid 1588)
省略n行
Total PSS by category:
   229151 kB: Unknown
   168328 kB: Dalvik
    81026 kB: .so mmap
    68324 kB: .dex mmap
省略n行
Total RAM: 2050448 kB (status normal)
 Free RAM: 1406208 kB (93100 cached pss + 43472 cached kernel + 1269636 free)
 Used RAM: 667312 kB (572656 used pss + 94656 kernel)
 Lost RAM: -23072 kB
   Tuning: 128 (large 256), oom 322560 kB, restore limit 107520 kB (high-end-gfx)

例如获取QQ占用内存:

C:\Users\ZHUIAO>adb shell dumpsys meminfo com.tencent.mm
Applications Memory Usage (kB):
Uptime: 4221423 Realtime: 4221423

** MEMINFO in pid 2118 [com.tencent.mm] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap        0        0        0        0    48448    43600     4847
  Dalvik Heap    40415    40356        0        0    44272    42148     2124
 Dalvik Other     9692     9688        0        0
        Stack       56       56        0        0
    Other dev        8        0        8        0
     .so mmap    21296     8520     7556        0
    .apk mmap       64        0       64        0
    .dex mmap    17666        4     5172        0
    .oat mmap     1653        0       64        0
    .art mmap     1836     1176        0        0
   Other mmap      238        8      212        0
      Unknown    49357    49144        0        0
        TOTAL   142281   108952    13076        0    92720    85748     6971

 App Summary
                       Pss(KB)
                        ------
           Java Heap:    41532
         Native Heap:        0
                Code:    21380
               Stack:       56
            Graphics:        0
       Private Other:    59060
              System:    20253

               TOTAL:   142281      TOTAL SWAP (KB):        0

 Objects
               Views:        0         ViewRootImpl:        0
         AppContexts:        3           Activities:        0
              Assets:        2        AssetManagers:        2
       Local Binders:       59        Proxy Binders:       26
       Parcel memory:       17         Parcel count:       68
    Death Recipients:        2      OpenSSL Sockets:        0

 SQL
         MEMORY_USED:      557
  PAGECACHE_OVERFLOW:      123          MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       96            120         4/29/6  /data/user/0/com.tencent.mm/no_backup/androidx.work.workdb
         1        2                         0/0/0    (attached) temp
         4       96             30         4/20/5  /data/user/0/com.tencent.mm/no_backup/androidx.work.workdb (1)
         4       28             20         2/17/3  /data/user/0/com.tencent.mm/databases/Scheduler.db
         4      108            260       31/30/16  /data/user/0/com.tencent.mm/databases/google_app_measurement.db

12.3、top命令

Linux是用top命令获取性能指标的,Android也可以用top命令获取进程的占用情况。这是一个实时显示的命令(adb shell dumpsys cpuinfo是获取一段时间内CPU的情况),会不断输出当前系统的一些数据。
查看某个包的一些性能指标(注意Linux用grep,Windows用findstr):adb shell top | grep “包名”
设定每隔1秒打印一次:adb shell top -d 1 | grep “包名”

进程号PIDUSERPRNIVIRTRESSHRS[%CUP]%MEMTIME+ARGS
282root12-836M2.3M1.0MS 8.00.15:33.35 surfaceflinger
C:\Users\ZHUIAO>adb shell top
[?25l[0m[H[JTasks: 78 total,   1 running,  77 sleeping,   0 stopped,   0 zombie                                                
Mem:   2050448k total,   774200k used,  1276248k free,     5612k buffers                                                           
Swap:        0k total,        0k used,        0k free,   214504k cached                                                            
200%cpu   4%user   4%nice  12%sys 180%idle   0%iow   0%irq   0%sirq   0%host                                                       
[7m  PID USER     PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS                                                                                                [0m
  282 root     12  -8  36M 2.3M 1.0M S  8.0   0.1   5:33.35 surfaceflinger
 4432 root     20   0 5.9M 2.5M 2.0M R  4.0   0.1   0:00.00 top
 2118 u0_a36   20   0 2.3G 185M  72M S  0.0   9.2   0:34.74 com.tencent.mm                                                         
 2070 u0_a1    20   0 1.4G  32M  16M S  0.0   1.5   0:00.23 com.android.providers.calendar                                         
 2060 system   20   0 1.4G  28M  13M S  0.0   1.3   0:00.18 com.android.keychain                                                   
 1975 u0_a3    20   0 1.4G  28M  13M S  0.0   1.4   0:00.19 com.android.defcontainer                                               
 1862 u0_a36   20   0 2.2G 161M  68M S  0.0   8.0   0:16.83 com.tencent.mm:push                                                    
 1847 u0_a30   20   0 1.4G  29M  14M S  0.0   1.4   0:00.24 com.android.quicksearchbox 

C:\Users\ZHUIAO>adb shell top| findstr com.tencent.mm
 2118 u0_a36   20   0 2.3G 187M  73M S  0.0   9.3   0:35.89 com.tencent.mm                                                         
 1862 u0_a36   20   0 2.2G 162M  69M S  0.0   8.0   0:17.00 com.tencent.mm:push                                                    
 2118 u0_a36   20   0 2.3G 187M  73M S  0.3   9.3   0:35.89 com.tencent.mm

12.4、电池电量状态:adb shell dumpsys battery

C:\Users\ZHUIAO>adb shell dumpsys battery
Current Battery Service state:
  AC powered: true
  USB powered: false
  Wireless powered: false
  Max charging current: 2000000  # 最大充电电流:mA
  status: 2		# 电池状态:2:充电状态,其他数字为非充电状态
  health: 2		# 电池健康状态:只有数字2表示good
  present: true	# 电池是否安装在机身
  level: 68		# 电量:百分比
  scale: 100
  voltage: 4004	# 电池电压
  temperature: 314	# 电池温度,单位是0.1摄氏度
  technology: Li-poly	# 电池种类

性能相关的具体用法可以在官网找到:https://developer.android.com/

13、adb shell monkey [参数] {随机发生事件数}

  • monkey是Google提供的一个用于稳定性与压力测试的命令行工具。
    例如adb shell monkey 100,就是随机发生100个事件(例如滑动、点击等),如下图在约2秒内完成了100个事件
C:\Users\ZHUIAO>adb shell monkey 100
Events injected: 100
    // activityResuming(com.nemu.backgrounddownload)
## Network stats: elapsed time=2243ms (0ms mobile, 0ms wifi, 2243ms not connected)

  • 参数
参数说明示例
-v打印详细的日志:(总共3个级别,vvv最详细)
adb shell monkey -v <事件数>
adb shell monkey -vv <事件数>
adb shell monkey -vvv <事件数>
adb shell monkey -v 10
-p运行某个包
指定一个包:adb shell monkey -p 包名 [时间数]
指定多个包:adb shell monkey -p 包名 -p 包名 [事件数]
adb shell monkey -p com.tencent.mobileqq 10
–throttle <milliseconds>每个事件结束后的间隔时间adb shell monkey -p com.tencent.mobileqq --throttle 300 -vvv 100
-s指定随机事件的种子数,如下面每个monkey都有种子数(:Monkey: seed=1660977938170 count=20),使用-s指定种子数可以复现该种子数的随机事件adb shell monkey -p com.tencent.mobileqq --throttle 300 -s 1660977938170 -vvv 100

如下,ACTION_MOVE移动、ACTION_DOWN按下、ACTION_UP抬起(按下抬起就是点击)

C:\Users\ZHUIAO>adb shell monkey -v 20
:Monkey: seed=1660977938170 count=20
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: -0.0%
//   6: 25.0%
//   7: 15.0%
//   8: 2.0%
//   9: 2.0%
//   10: 1.0%
//   11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.gallery3d/.app.GalleryActivity;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.gallery3d/.app.GalleryActivity } in package com.android.gallery3d
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-5.0)
:Sending Touch (ACTION_DOWN): 0:(120.0,102.0)
:Sending Touch (ACTION_UP): 0:(142.98206,80.942245)
:Sending Touch (ACTION_DOWN): 0:(363.0,87.0)
:Sending Touch (ACTION_UP): 0:(344.12848,86.39064)
Events injected: 20
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=3155ms (0ms mobile, 0ms wifi, 3155ms not connected)
// Monkey finished
  • 中断monkey:
    退出monkey的情况:事件数全都执行完了,程序崩溃了,杀monkey进程(杀进程如下)
    如果再控制台按下Ctrl+C控制台会退出monkey命令,但是monkey还是在手机中运行(而不是在电脑端)。可以在控制台按Ctrl+C退出monkey命令后,adb shell进入内环境,用ps找到monkey进程PID,然后杀掉进程(kill -9 进程号)。
C:\Users\ZHUIAO>adb shell monkey 1000
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
    // Injection Failed
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
    // Injection Failed
^C
C:\Users\ZHUIAO>adb shell
root@VIVO X20:/ # ps | grep monkey
root      2557  279   1373464 41460          0 7f8d41747d77 S com.android.commands.monkey
root@VIVO X20:/ # kill -9 2557
root@VIVO X20:/ # ps | grep monkey
1|root@VIVO X20:/ #
1|root@VIVO X20:/ #
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值