1. ADB命令概述:移动开发者的瑞士军刀
ADB(Android Debug Bridge)是每个Android开发者必须掌握的核心工具链。这套命令行工具本质上是一个客户端-服务器程序,包含三个关键组件:运行在开发机上的客户端(adb命令)、负责通信的守护进程(adbd)以及连接两者的服务端。我每天的工作都离不开它——从基础的设备调试到自动化测试脚本编写,再到系统级权限管理,ADB就像一把多功能军刀,能解决Android开发中80%的底层操作问题。
典型使用场景包括但不限于:
- 应用安装/卸载的批量操作(比手动点击效率提升10倍)
- 屏幕截图/录屏的自动化采集(适合做UI测试报告)
- 系统日志实时过滤分析(快速定位ANR和Crash)
- 设备文件系统的直接访问(救砖刷机必备)
- 性能指标监控(内存、CPU、帧率等)
注意:使用ADB需要先开启设备的开发者选项和USB调试模式。不同厂商设备开启方式略有差异,通常需要在"关于手机"中连续点击版本号7次激活开发者选项。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境配置与设备连接
2.1 跨平台安装指南
ADB工具链包含在Android SDK的platform-tools包中。对于现代开发环境,推荐通过命令行安装:
bash复制# MacOS使用Homebrew
brew install --cask android-platform-tools
# Linux Debian系
sudo apt install android-tools-adb
# Windows Chocolatey
choco install adb
安装完成后需要将adb添加到系统PATH。我习惯在~/.zshrc中添加:
bash复制export PATH=$PATH:/path/to/android-sdk/platform-tools
验证安装成功的标志是终端执行adb version能正确显示版本号。目前稳定版是33.0.3,建议保持更新以获得最新功能支持。
2.2 设备连接问题排错
当adb devices列表为空时,按以下步骤排查:
-
物理连接检查:
- 使用原装数据线(第三方线可能仅支持充电)
- 尝试不同USB接口(优先选用主板原生接口)
- 对于Type-C接口,正反面试插拔
-
驱动问题处理:
- Windows设备管理器中出现"Android Device"才算识别成功
- 推荐安装通用驱动Google USB Driver
- 华为等厂商设备可能需要单独安装HiSuite
-
授权确认:
- 首次连接时设备端会弹出RSA密钥确认对话框
- 勾选"始终允许"避免重复确认
- 可查看
~/.android/adbkey.pub比对密钥指纹
对于无线调试(Android 11+新特性),需要先有线连接执行:
bash复制adb pair 192.168.1.100:12345
输入设备端显示的6位验证码后,即可拔掉数据线通过WiFi继续调试。
3. 应用管理核心命令
3.1 应用安装的三种模式
bash复制# 常规安装(覆盖安装)
adb install app-debug.apk
# 保留数据降级安装(调试场景常用)
adb install -d app-debug.apk
# 多用户安装(企业版场景)
adb install --user 10 app-debug.apk
安装失败常见错误码:
INSTALL_FAILED_VERSION_DOWNGRADE:APK版本号低于已安装版本INSTALL_FAILED_UPDATE_INCOMPATIBLE:签名证书不一致INSTALL_FAILED_INSUFFICIENT_STORAGE:存储空间不足
技巧:使用
adb shell pm list packages -f可以查看已安装应用的真实APK路径,这对分析预装应用特别有用。
3.2 应用卸载的深层操作
普通卸载命令:
bash复制adb uninstall com.example.app
保留数据和缓存文件的卸载(适合测试数据保留):
bash复制adb uninstall -k com.example.app
系统应用卸载需要root权限:
bash复制adb shell pm uninstall --user 0 com.xiaomi.bloatware
这个命令实际上是将系统应用对当前用户禁用,而非真正卸载。执行后应用会从启动器消失,但仍在系统分区。
4. 设备控制与系统操作
4.1 屏幕捕获高级技巧
基础截图命令:
bash复制adb exec-out screencap -p > screen.png
带时间戳的自动化截图(适合测试用例):
bash复制adb shell screencap -p /sdcard/$(date +%s).png
adb pull /sdcard/*.png ./screenshots/
录屏操作(Android 4.4+):
bash复制adb shell screenrecord --bit-rate 4000000 /sdcard/demo.mp4
按Ctrl+C停止录制后,用adb pull获取视频文件。注意最大录制时间默认180秒,可通过--time-limit参数调整。
4.2 系统关键操作
重启到不同模式:
bash复制# 普通重启
adb reboot
# 重启到bootloader(刷机模式)
adb reboot bootloader
# 重启到recovery
adb reboot recovery
修改系统设置(需要root):
bash复制adb shell settings put global policy_control immersive.full=*
这个命令可以启用全屏沉浸模式,隐藏状态栏和导航栏。
5. 文件传输与日志分析
5.1 高效文件管理
从设备拉取文件:
bash复制adb pull /sdcard/DCIM/Camera/ ./photos/
推送文件到设备:
bash复制adb push ./update.zip /sdcard/
批量操作技巧:
bash复制# 拉取所有jpg文件(Mac/Linux)
adb shell ls /sdcard/*.jpg | tr -d '\r' | xargs -n1 adb pull
# 拉取最近修改的文件
adb shell ls -t /sdcard/DCIM/ | head -1 | xargs adb pull
5.2 日志过滤高阶用法
基础日志查看:
bash复制adb logcat
按标签过滤(适合多模块系统):
bash复制adb logcat -s MyApp:D System.err:W
按时间范围查询(调试历史问题):
bash复制adb logcat -t '06-15 14:30:00.000' -d
性能日志采集(用于分析卡顿):
bash复制adb shell am dumpheap <PID> /data/local/tmp/heap.hprof
6. 调试与自动化技巧
6.1 输入模拟实战
点击屏幕坐标:
bash复制adb shell input tap 500 500
文本输入(支持中文需先设置IME):
bash复制adb shell ime set com.android.adbkeyboard/.AdbIME
adb shell am broadcast -a ADB_INPUT_TEXT --es msg "你好世界"
滑动解锁示例:
bash复制adb shell input swipe 300 1000 300 500
6.2 自动化测试集成
启动Activity并传递参数:
bash复制adb shell am start -n com.example/.MainActivity -e key value
广播发送示例:
bash复制adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Monkey压力测试:
bash复制adb shell monkey -p com.example.app -v 5000
7. 高级权限管理
7.1 Root权限获取
临时获取root shell:
bash复制adb root
adb shell
永久禁用SELinux(开发板常用):
bash复制adb shell setenforce 0
adb shell "echo 0 > /sys/fs/selinux/enforce"
7.2 系统属性修改
查看所有属性:
bash复制adb shell getprop
修改build.prop(需要remount):
bash复制adb remount
adb shell "echo ro.debuggable=1 >> /system/build.prop"
8. 网络调试技巧
端口转发(本地访问设备服务):
bash复制adb forward tcp:8080 tcp:80
反向代理(设备访问本地服务):
bash复制adb reverse tcp:8080 tcp:3000
网络连接检查:
bash复制adb shell netstat -tuln
adb shell ping -c 4 8.8.8.8
9. 性能监控命令
内存占用查看:
bash复制adb shell dumpsys meminfo com.example.app
CPU使用率监控:
bash复制adb shell top -n 1 | grep com.example
GPU渲染分析:
bash复制adb shell dumpsys gfxinfo com.example.app
电池状态检查:
bash复制adb shell dumpsys battery
10. 疑难问题解决方案
10.1 设备离线状态处理
当adb devices显示设备为offline时:
- 重启adb服务:
adb kill-server && adb start-server - 重新插拔USB线
- 检查设备端USB调试是否被意外关闭
10.2 签名冲突问题
安装时出现INSTALL_FAILED_DUPLICATE_PERMISSION错误,说明存在签名不同的同名应用。解决方法:
bash复制adb uninstall com.example.app
adb install --force-uuid app-new.apk
10.3 存储空间不足
清理应用缓存:
bash复制adb shell pm trim-caches 500000000
查看存储详情:
bash复制adb shell df -h
adb shell du -sh /data/data/*
11. 实战组合命令示例
批量卸载测试APK:
bash复制adb shell pm list packages | grep 'test' | cut -d: -f2 | xargs -n1 adb uninstall
自动截图并拉取:
bash复制for i in {1..10}; do
adb shell screencap -p /sdcard/screen$i.png
sleep 1
done
adb pull /sdcard/screen*.png ./captures/
应用冷启动时间测试:
bash复制adb shell am force-stop com.example.app
time adb shell am start -W -n com.example/.MainActivity | grep TotalTime
12. 安全注意事项
- 生产环境谨慎使用
adb root,可能降低系统安全性 - 不要随意修改
/system分区文件,可能导致设备变砖 - 公共电脑使用ADB后,建议删除
~/.android/adbkey密钥文件 - 无线调试完成后及时关闭网络ADB功能
我在长期使用中发现,将常用ADB命令封装成Shell脚本或Makefile能极大提升效率。比如创建debug.sh包含常用命令,通过参数控制不同操作。对于团队协作,建议整理命令速查表并纳入开发规范文档。
