ADB命令实战指南:从基础到高级应用

张开发
2026/4/8 2:39:46 15 分钟阅读

分享文章

ADB命令实战指南:从基础到高级应用
1. ADB命令入门从零开始掌握调试利器第一次接触ADB时我完全被这个黑乎乎的终端窗口吓到了。直到有一次项目紧急调试硬着头皮用adb logcat抓到崩溃日志后才发现这简直是Android开发的瑞士军刀。ADB全称Android Debug Bridge就像一座连接电脑和手机的数据桥梁所有你看不到的设备内部状态都能通过它一览无余。要开始使用ADB首先得准备好三样东西安装好Android SDK的电脑、数据线、以及开启开发者模式的手机。在手机的设置里狂点版本号七次激活开发者选项然后开启USB调试开关这个操作就像拿到了进入设备后台的通行证。连接电脑后在终端输入adb devices如果看到一串设备序列号恭喜你已经成功了一半。我遇到过很多新手卡在这一步常见问题包括驱动未安装解决方法是去官网下载对应驱动、USB调试未开启重新检查开发者选项、或者使用了劣质数据线换条线试试。当终端显示出你的设备时那种成就感就像第一次成功点亮LED灯。2. 设备连接的双通道USB与WiFi实战2.1 传统USB连接详解USB连接看似简单但藏着不少玄机。上周帮同事调试时发现他的小米手机始终无法识别最后发现是MIUI系统默认关闭了USB安装权限。除了常规的adb devices这几个诊断命令特别实用# 查看USB设备列表Mac/Linux lsusb # Windows可用 adb usb当设备状态显示为unauthorized时记得检查手机屏幕是否弹出RSA密钥确认对话框。有次我换了新电脑调试死活连不上后来发现旧电脑的密钥还缓存着用adb kill-server清掉缓存才解决。2.2 无线调试高阶玩法摆脱数据线的束缚简直太爽了我习惯先用USB线初始化连接adb tcpip 5555 adb connect 192.168.1.100:5555成功后拔掉线整个世界都清爽了。但在公司内网调试时踩过坑——路由器隔离了客户端通信导致adb死活连不上。后来改用手机热点创建临时网络才搞定。无线调试时如果突然断连可以尝试adb disconnect adb reconnect有个冷知识通过adb mdns check可以查看局域网内支持mDNS发现的Android设备这对IoT设备调试特别有用。3. 应用管理的十八般武艺3.1 应用信息深度探查排查内存泄漏时我经常组合使用这些命令# 查看应用内存占用 adb shell dumpsys meminfo com.example.app # 获取CPU使用率 adb shell top -n 1 | grep com.example.app # 检测Activity泄漏 adb shell dumpsys activity activities | grep Hist最近发现adb shell pm list packages -f能显示apk安装路径配合adb pull可以直接提取竞品的apk文件仅限合法用途。安装应用时-g参数可以自动授予所有运行时权限这在自动化测试时特别省事adb install -g demo.apk3.2 应用调试黑科技遇到应用无响应时除了常规的adb shell am force-stop还可以用adb shell am hang让应用故意挂起测试崩溃恢复。更狠的是这个命令adb shell am crash com.example.app它会直接触发目标应用的崩溃适合测试异常处理流程。监控广播接收时adb shell am monitor就像个实时雷达所有广播动态尽收眼底。最近还发现adb shell cmd package bg-dexopt-job可以手动触发dex优化解决某些机型首次启动慢的问题。4. 文件操作的终极指南4.1 双向文件传输技巧adb push/pull用起来简单但大文件传输经常中途断开。我的解决方案是# 分块压缩传输 adb shell tar -czf /sdcard/data.tgz /data/local/tmp adb pull /sdcard/data.tgz遇到权限拒绝时可以尝试adb shell run-as package.name访问应用私有目录。有个骚操作是用adb exec-out直接获取二进制流adb exec-out screencap -p screen.png这比先保存到设备再pull快多了。管理SD卡文件时记得Android 11之后需要启用MANAGE_EXTERNAL_STORAGE权限否则会报Permission denied。4.2 文件系统深度探索通过adb shell ls -alZ可以查看SELinux上下文排查权限问题特别有用。有次发现应用无法读取配置文件就是这个命令发现文件标签不对用chcon修复的。查找文件时adb shell find / -name *.so 2/dev/null2/dev/null可以过滤掉大量权限拒绝的噪音。我还经常用adb shell df -h查看存储空间用adb shell du -sh /data/data统计应用数据大小。5. 网络调试与系统诊断5.1 网络状态全面监控排查网络问题时这套组合拳屡试不爽# 查看当前网络配置 adb shell ifconfig wlan0 # 持续ping测试 adb shell ping -c 10 8.8.8.8 # 抓取TCP数据包 adb shell tcpdump -i wlan0 -s0 -w /sdcard/capture.pcap分析HTTPS流量时需要先adb root然后在设备上安装Charles等工具的证书到系统证书目录。最近Android 14加强了证书限制可能需要修改网络配置文件。5.2 系统属性深度挖掘adb shell getprop输出的信息量超乎想象比如# 查看GPU渲染器 adb shell getprop ro.hardware.egl # 检查安全补丁版本 adb shell getprop ro.build.version.security_patch # 获取屏幕实际分辨率 adb shell getprop ro.sf.real_display_size我习惯把这些信息整理成表格不同机型对比时一目了然。监控系统事件可以用adb shell dumpsys battery看电量变化adb shell dumpsys sensorservice查传感器状态。6. 高级调试技巧合集6.1 屏幕操作自动化截屏除了常规方法还可以# 截取特定层级的画面 adb shell screencap -l 1 /sdcard/layer1.png # 录制带触摸轨迹的操作 adb shell screenrecord --show-touches demo.mp4更神奇的是用adb shell input模拟各种操作# 滑动解锁 adb shell input swipe 300 1000 300 500 # 输入文本 adb shell input text Hello%sworld注意%会被当作空格转义需要特殊处理。6.2 性能分析实战分析卡顿时这几个命令是黄金搭档# 监控帧率 adb shell dumpsys gfxinfo com.example.app # 查看进程优先级 adb shell ps -eo pid,pri,ni,cmd | grep example # 追踪系统调用 adb shell strace -p $(pidof com.example.app)最近发现adb shell dumpsys window visible-apps可以检测界面元素是否过度绘制配合adb shell setprop debug.hwui.overdraw show可视化效果更直观。7. 安全调试与逆向分析7.1 调试防护绕过技巧遇到反调试的应用时可以尝试# 关闭SELinux adb shell setenforce 0 # 挂载可写系统分区 adb shell mount -o rw,remount /system但要注意这些操作可能违反应用使用条款。分析APK时先用adb shell pm path定位安装位置然后用adb pull提取。动态分析推荐adb shell am start -D启动调试模式配合IDA或JEB进行动态跟踪。7.2 系统日志深度过滤adb logcat的强大之处在于灵活过滤# 按进程ID和标签组合过滤 adb logcat --pid$(adb shell pidof com.example.app) *:S # 显示包含ANR的日志 adb logcat -b events | grep am_anr # 监控数据库操作 adb logcat -v threadtime | grep SQLite建议把常用过滤条件保存为shell脚本比如我的logcat-error.sh就包含十几种常见错误模式匹配。

更多文章