09. adb常用命令
2024年10月28日大约 5 分钟
09. adb常用命令
1. 显示系统中全部设备
- adb devices
查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示
2. ADB服务的开启或关闭
开启
- adb start-server
关闭
- adb kill-server
3. 设备连接与断开
通过IP连接设备
adb connect IP
如果是USB连接,直接会连接ADB,如果是想通过网络连接(有线或者无线),则需要在同一个局域网,通过IP连接。上面 IP 替换成想要连接设备的IP即可。
通过IP断开设备
adb disconnect IP
4. 安装、卸载软件包
安装软件
adb install -r (APK路径)
adb install -r 替换已存在的应用程序,也就是说强制安装 adb install -t 允许测试包 adb install -d 允许安装的比手机上带的版本低 adb install -g 为应用程序授予所有运行时的权限
卸载软件
- adb uninstall (apk包名)
- adb uninstall -k
- 卸载 app 但保留数据和缓存文件:adb uninstall -k (apk包名)
5. 获取软件包名
pm: package manager
列出手机装的所有app的包名
- adb shell pm list packages
列出系统应用的所有包名
- adb shell pm list packages -s
列出第三方应用包名(除了系统应用)
- adb shell pm list packages -3
显示当前打开的软件包名(如图)
需要打开目标软件(运行中)
- Windows:adb shell dumpsys window | findStr mCurrentFocus()
- Mac/Linux:adb shell dumpsys window | grep mCurrentFocus
查询当前运行activity
- adb shell dumpsys window | findstr mCurrentFocus(需要打开目标软件)
- adb shell dumpsys activity activities | grep mResumedActivity
adb shell dumpsys activity | findstr mFocusedAppadb shell dumpsys activity | findstr mFocusedWindowadb shell dumpsys activity top
6. 清除应用数据与缓存
清除应用数据与缓存
adb shell pm clear apk包名
7. 启动、停止应用
am: activity manager
- 启动
- adb shell am start 包名/Activity名
- 停止
- adb shell am force-stop (apk包名)
- 说明: 启动app主页面(其他页面需要开发进行配置允许三方应用唤起才能启动该页面)
- 获取应用信息:
- adb shell dumpsys package <packagename>
- 查看应用主页面
- 重启手机
- adb shell reboot
8. 获取APP日志
格式
adb logcat > 指定路径
adb logcat > C:\Users\18810\Desktop\1.txt
执行完后 Ctrl+C 结束日志获取
查看获取的 1.txt 文档即可
- 抓取日志以后重定向到某个文件 '>' : 覆盖文件内容 '>>' : 追加在文件末尾 - 使用场景: 测试期间记录日志. adb logcat > 本地文件 - adb logcat | findstr error >> C:\Users\18810\Desktop\1.txt - 避免问题由于不确定复现步骤而导致无法复现, 并且被研发拒绝. 推荐阅读:https://blog.csdn.net/f2006116/article/details/89077030
9. 获取APP启动时间
格式
adb shell am start -W 包名/activity名
常见参数:
- -S:表示每次启动前先强行停止
- -R:表示重复测试次数
- -W:显示启动过程的时间统计信息。
- 常见的三个指标
- ThisTime: 当前activity的时间
- TotalTime:应用的启动时间,包括创建进程、App初始化、Activity初始化到界面显示
- WaitTime:前一个应用activity pause的时间 +TotalTime
- 常见的三个指标
举例
adb shell am start -S -R 5 -W 包名/activity名称
10. 获取内存
格式
- adb shell dumpsys meminfo <包名>
Native/Dalvik 的 Heap 信息
- 如果发现这个值一直增长,则代表程序可能出现了内存泄漏(Out of memary)
Total 的 PSS 信息
- 这个值是应用真正占据的内存大小,通过这个信息,可以轻松判别手机中哪些程序占内存比较大
11. 查看CPU占用情况
1. adb shell dumpsys cpuinfo (查看当前CPU占用情况)
2. adb shell top -s 9 (9代表CPU)
- 格式
- adb shell top -m 10 -s 9(-m显示最大数量,-s 按指定行排序)
- 参数含义
- PID : 应用程序ID
- S : 进程的状态(S表示休眠,R表示正在运行,Z表示僵死状态,N表示 该进程优先值是负数)
- #THR : 程序当前所用的线程数
- VSS : 虚拟耗用内存(包含共享库占用的内存)
- RSS : 实际使用物理内存(包含共享库占用的内存)
- PCY : 前台(fg)和后台(bg)进程
- UID : 用户身份ID
- Name : 应用程序名称
130|cmi:/ $ top --help
Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)
usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]
Show process activity in real time.
-H Show threads
-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)
-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)
-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)
-s Sort by field number (1-X, default 9)
-b Batch mode (no tty)
-d Delay SECONDS between each cycle (default 3)
-m Maximum number of tasks to show
-n Exit after NUMBER iterations
-p Show these PIDs
-u Show these USERs
-q Quiet (no header lines)
12. 获取APP使用流量
ADB 获取 Android 10 及以上系统的 App 进程流量数据问题
Android 10 开始,抛弃 xt_qtaguid,采用 ebpf 记录网络流量数据,所以无法再通过/proc/net/xt_qtaguid/stats 文件获取进程流量数据了。
目前发现通过 adb 有 4 种方式获取进程流量数据:
1. 读取/proc/uid_stat/$uid/tcp_rcv 和/proc/uid_stat/$uid/tcp_snd:兼容性差,很多手机没有这两个文件;
2. 读取/proc/$pid/net/dev:$pid 会迷惑人,以为是进程相关的流量数据,但经过测试发现该文件记录的是网卡的流量数据,无法得到进程的流量数据
3. 读取/proc/net/xt_qtaguid/stats: 该方式可以获取进程流量数据,但是只能在 Android 9.0 及以下的系统中使用
4. 读取/sys/fs/bpf/traffic_uid_stats_map: 该方式应该可以在 Android 10 及以上的系统中获取进程流量数据,但是需要 root 权限
PerfDog 工具却可以监控未 root 的 Android 10 系统手机的 App 进程流量,经过测试发现,PerfDog 启动后手机上会产生 “PerfDogServer” 和 “PerfDogServerExt” 两个进程,因此猜测它应该是通过手机端的后台程序调用系统接口
- 获取userId(返回数据为userId=)
- adb shell dumpsys package com.tpshop.malls | findstr userId
- 获取上行流量(返回数据单位是bytes字节)
- adb shell cat proc/uid_stat/10041/tcp_snd
- 获取下行流量(返回数据单位是bytes字节)
- adb shell cat proc/uid_stat/userId/tcp_rcv
13. 获取已安装的应用安装文件
adb shell dumpsys window | findstr mCurrentFocus
adb shell pm path com.wddg.app.newbie
# 桌面运行CMD
adb pull /data/app/com.wddg.app.newbie-1/base.apk
adb install ./base.apk