Android ADB 常用命令
本文最后更新于:2025年7月20日 晚上
无论哪个命令,都应该先看帮助文档
dumpsys 服务
android调试——教你用dumpsys命令调试 - Weiwq的博客 | Weiwq Blog
使用adb命令判断Android屏幕是否横向或纵向_安卓手机关闭纵向adb-CSDN博客
包管理
安装
.apkm,.xapk和.apks 安装 - petercao - 博客园
xapk修改后缀为.rar, 然后解压,执行如下命令安装解压文件中主要的apk
adb install-multiple <path>/org.benchmark.demo.apk <path>/config.xxhdpi.apk <path>/config.en.apk <path>/config.arm64_v8a.apk
磁盘
系统升级
Android 的Recovery机制 - yutingliuyl - 博客园
升级日志路径
recovery mode: /tmp/recovery.log
normal mode:/cache/recovery/last_log
logcat
Android logcat log输出控制_persist.log.tag-CSDN博客
禁止所有 log 输出: setprop persist.log.tag S
安卓Framework开发快速分析日志及定位源码 原创 - 清霜辰 - 博客园
Android ProtoLog动态开启相关wm logging源码分析补充-CSDN博客
调试应用
Trace
抓取Systrace方法汇总_systrace抓取-CSDN博客
Python解析systrace获取APP快速滑动界面的帧率 - 知乎
atrace
perfetto
打印堆栈
Android打印Trace堆栈 - Gityuan博客 | 袁辉辉的技术博客
kill -3 pid打印trace原理笔记_android kill -3-CSDN博客
- kill -3 [pid] 打印 java 堆栈,生成trace文件保存在文件data/anr/traces.txt
- debuggerd -b [tid] 打印 native 堆栈到控制台,若不带参数则输出tombstones文件,保存到目录/data/tombstones
- cat /proc/[tid]/stack kernel 堆栈
类别 | 函数式 | 命令式 |
---|---|---|
Java | Process.sendSignal(pid, Process.SIGNAL_QUIT) | kill -3 [pid] |
Native | Debug.dumpNativeBacktraceToFile(pid, tracesPath) | debuggerd -b [pid] |
Kernel | WD.dumpKernelStackTraces() | cat /proc/[tid]/stack |
分析异常时往往需要关注的重要目录:/data/anr/traces.txt /data/tombstones/tombstone_X /data/system/dropbox/
有时候Kernel log的输出是由级别限制,可通过如下命令查看:
1 |
|
参数解读:
- 控制台日志级别:优先级高于该值的消息将被打印至控制台。
- 缺省的消息日志级别:将用该值来打印没有优先级的消息。
- 最低的控制台日志级别:控制台日志级别可能被设置的最小值。
- 缺省的控制台日志级别:控制台日志级别的缺省值
日志级别:
级别 | 值 | 说明 |
---|---|---|
KERN_EMERG | 0 | 致命错误 |
KERN_ALERT | 1 | 报告消息 |
KERN_CRIT | 2 | 严重异常 |
KERN_ERR | 3 | 出错 |
KERN_WARNING | 4 | 警告 |
KERN_NOTICE | 5 | 通知 |
KERN_INFO | 6 | 常规 |
KERN_DEBUG | 7 | 调试 |
Log相关命令
- dmesg 或 cat /proc/kmsg
- logcat -L 或 cat /proc/last_kmsg
- logcat -b events -b system
addr2line
addr2line功能是将函数地址解析为函数名,用来分析 native crash
Native地址转换
Step 1: 获取symbols表
先获取对应版本的symbols,即可找到对应的so库。(最好是对应版本addr2line,可确保完全匹配)
Step 2: 执行addr2line命令
1 |
|
另外,有兴趣可以研究下development/scripts/stack
,地址批量转换工具。
kernel地址转换
addr2line也适用于调试分析Linux Kernel的问题。例如,查询如下命令所对应的代码行号
1 |
|
Step 1: 获取符号地址
通过命令arm-eabi-nm从vmlinux找到目标方法的符号地址,其中nm和vmlinux所在目录:
- arm-eabi-nm位于目录prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/
- vmlinux位于目录out/target/product/xxx/obj/KERNEL_OBJ/
执行如下命令:(需要带上绝对目录)
1 |
|
则输出结果: c02b2f28 T binder_thread_read
,可知binder_thread_read的符号地址为c02b2f28, 其偏移量为0x2a0,则计算后的目标符号地址= c02b2f28 + 2a0,然后再采用addr2line转换得到方法所对应的行数
Step 2: 执行addr2line命令
1 |
|
注意:对于kernel调用栈翻译过程都是通过vmlinux来获取的
toybox和busybox
am monitor 可以持续监控App的包名,当切换应用时,如果包名有变化,就会在终端输出
显示系统
使用 Winscope 跟踪窗口转换 | Android Open Source Project
Android dump渲染和合成图层GraphicBuffer指南_android dump图层-CSDN博客
安全
appops help
网络
tcpdump
全网最详细的 tcpdump 使用指南 - 王一白 - 博客园
wpa_cli
ip
Android系统网络操作命令基础_andriod13设置路由-CSDN博客
策略表—-开始数字越小,优先级越高
ip rule list
第0条规则为系统默认:0:from all lookup local,不可更改,表示所有的链接,首先遍历local表
路由表:ip route list table[ID]
因为最高优先规则,所有的连接都会优先遍历local表
系统默认发三个路由表
253(default)、254(main)、255(local)
local表内容
ip route list table local
实际生效的路由信息
ip route list
设置ip地址
ip addr add 192.168.0.193/24 dev wlan0
查看ip地址
ip addr show wlan
删除ip地址
ip addr del 192.168.0.193/24 dev wlan0
列出路由表条目
ip route show
查看某IP地址的路由包路径
ip route get 10.42.0.47
更改默认路由
ip route add default via 192.168.0.196
显示网络统计数据
ip -s link
获取特定网络接口的信息(在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息)
ip -s -s link ls wlan0
地址解析协议ARP:用于将一个ip地址转化为它对应的物理地址即MAC地址
查看接入设置的MAC地址
ip neighbour
监控netlink消息:查看网络设备的状态REACHABLE/STALE
ip monitor all
激活网络接口
ip link set wlan0 up
停止网络接口
ip link set wlan0 down
获取帮助
ip route help
Audio
查看audio的全部信息(各音频流音量,焦点,策略等)
dumpsys audio
音量
按键方式
1 |
|
media命令
1 |
|
安卓 11 开始 media 命令没有了,使用cmd media_session
cmd media_session volume --stream 3 --get
cmd media_session volume --show --stream 3 --set 11
其他方法
service call audio
adb shell service call audio 9 i32 <编号> i32 <类型> i32 1
使用ADB调整Android设备音量及解决常见问题-CSDN博客: https://blog.csdn.net/run068/article/details/122824920