Android ADB 常用命令

本文最后更新于:2025年7月20日 晚上

无论哪个命令,都应该先看帮助文档

dumpsys 服务

android调试——教你用dumpsys命令调试 - Weiwq的博客 | Weiwq Blog

使用adb命令判断Android屏幕是否横向或纵向_安卓手机关闭纵向adb-CSDN博客

包管理

安装

.apkm,.xapk和.apks 安装 - petercao - 博客园

多apk发布的Android程序的adb安装

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查看分区情况 - 简书

系统升级

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
2
adb shell cat /proc/sys/kernel/printk  
4 4 1 7

参数解读:

  • 控制台日志级别:优先级高于该值的消息将被打印至控制台。
  • 缺省的消息日志级别:将用该值来打印没有优先级的消息。
  • 最低的控制台日志级别:控制台日志级别可能被设置的最小值。
  • 缺省的控制台日志级别:控制台日志级别的缺省值

日志级别:

级别 说明
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
2
3
4
5
6
7
// 64位
cd prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
./aarch64-linux-android-addr2line -f -C -e libxxx.so <addr1>

//32位
cd /prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
./arm-linux-androideabi-addr2line -f -C -e libxxx.so <addr1>

另外,有兴趣可以研究下development/scripts/stack,地址批量转换工具。

kernel地址转换

addr2line也适用于调试分析Linux Kernel的问题。例如,查询如下命令所对应的代码行号

1
[<0000000000000000>] binder_thread_read+0x2a0/0x324

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
arm-eabi-nm  vmlinux |grep binder_thread_read

则输出结果: c02b2f28 T binder_thread_read,可知binder_thread_read的符号地址为c02b2f28, 其偏移量为0x2a0,则计算后的目标符号地址= c02b2f28 + 2a0,然后再采用addr2line转换得到方法所对应的行数

Step 2: 执行addr2line命令

1
./aarch64-linux-android-addr2line -f -C -e vmlinux [目标地址]

注意:对于kernel调用栈翻译过程都是通过vmlinux来获取的

toybox和busybox

toybox 和 busybox 的作用

am monitor 可以持续监控App的包名,当切换应用时,如果包名有变化,就会在终端输出

显示系统

使用 Winscope 跟踪窗口转换 | Android Open Source Project

Android dump渲染和合成图层GraphicBuffer指南_android dump图层-CSDN博客

安全

appops help

adb之多用户管理_adb 切换用户-CSDN博客

网络

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
2
3
4
5
6
7
8
#增加
input keyevent 24

#减少
input keyevent 25

#静音
input keyevent 164

media命令

1
2
3
4
5
6
7
8
9
#设置音量并且显示音量UI
#3 代表STREAM_SYSTEM
media volume --show --stream 3 --set 11
media volume --show --stream 3 --adj raise
media volume --show --stream 0 --adj lower
media volume --show --stream 3 --get
#控制播放暂停
media dispatch play
media dispatch pause

安卓 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


Android ADB 常用命令
https://iwesley.top/article/dfa112ac/
作者
Wesley
发布于
2024年11月17日
许可协议