1. ADB调试入门:从零搭建连接环境
第一次接触ADB时,我盯着黑乎乎的终端窗口手足无措。直到亲眼看到同事用三行命令抓取了崩溃日志,才意识到这个工具的强大。ADB(Android Debug Bridge)就像连接电脑和Android设备的隐形数据线,不过它传输的不是电流,而是调试指令。
安装Android Studio时会自动配置ADB工具链,但纯命令行爱好者可以单独下载Platform Tools包。解压后建议将路径添加到系统环境变量,这样在任何目录都能调用adb命令。验证安装成功的标志是在终端输入adb version能看到版本号输出,就像这样:
$ adb version Android Debug Bridge version 1.0.41连接设备时新手常遇到的两个坑:一是忘记开启USB调试模式,需要在设备开发者选项中手动开启;二是电脑缺少设备驱动,Windows用户可以通过设备管理器安装Google USB Driver。当使用adb devices命令看到类似下面的输出时,说明连接成功:
List of devices attached emulator-5554 device无线调试是Android 11引入的实用功能,先用数据线执行adb pair 192.168.1.100:12345配对,之后就能断开线缆。我在测试多设备联动时特别依赖这个特性,可以同时连接三台手机而不需要一堆USB线缠绕。
2. 应用管理全流程操作指南
上周排查一个启动崩溃问题时,我不得不反复安装卸载测试APK。传统做法是点击安装包手动操作,而用ADB只需要一行命令:adb install -t ~/Downloads/test.apk。加上-t参数允许安装测试包,-r参数保留数据覆盖安装,组合使用效率提升十倍不止。
查看已安装应用列表时,adb shell pm list packages会输出所有包名。加上-3筛选第三方应用,用grep过滤特定应用更高效。比如找所有电商类APP:
adb shell pm list packages -3 | grep 'shop'应用数据清理是测试必备技能,特别是处理用户登录状态时。adb shell pm clear com.example.app会重置应用到初始状态,相当于卸载重装但保留APK文件。记得有次测试支付功能,我用这个命令快速重置了20次测试账号,比手动操作节省半小时。
提取APK文件也很有用,当产品经理说"把线上版本装回来对比下"时,adb pull /data/app/com.example.app/base.apk能快速拿到生产环境APK。配合aapt dump badging命令还能解析版本号等元数据,避免装错版本。
3. 日志抓取与高级分析技巧
系统日志就像Android设备的黑匣子,但直接用Android Studio查看日志容易漏掉关键信息。我习惯用adb logcat -v time > log.txt把日志保存到文件,加上-v time参数显示完整时间戳。过滤崩溃日志最常用的是adb logcat *:E只看错误级别日志。
更专业的做法是用adb logcat -b all抓取所有日志缓冲区,包括system/events/radio等。曾经有个蓝牙连接问题,就是在radio缓冲区发现了底层超时错误。建议配合grep进行二次过滤,比如找特定进程的ANR日志:
adb logcat -v threadtime | grep -E 'ANR in|pid=12345'连续日志监控也很实用,测试内存泄漏时我用过这个组合命令:
adb logcat --pid=`adb shell pidof com.example.app` -v thread它会持续输出目标进程的日志,包括线程切换信息。加上| grep ActivityManager还能监控Activity生命周期,特别适合排查界面跳转问题。
4. 性能调优实战命令合集
内存泄漏排查是我的日常任务之一,adb shell dumpsys meminfo com.example.app能显示详细的内存使用情况。重点关注Native Heap和Java Heap的增长趋势,突然上升往往预示泄漏。有个技巧是用watch -n 1每秒刷新一次数据:
watch -n 1 adb shell dumpsys meminfo com.example.appCPU性能分析离不开top命令,adb shell top -n 1显示当前CPU占用率。加上-m 10显示前10个进程,-d 5每5秒刷新。遇到卡顿时先看CPU是否跑满,再配合adb shell vmstat 1监控系统负载。
帧率监控是UI优化的基础,Android 4.1以上可以用:
adb shell dumpsys gfxinfo com.example.app这个命令会输出最近120帧的渲染耗时,Janky frames列显示掉帧数。如果是游戏类应用,建议加上framestats参数获取更详细的GPU时序数据。
5. 系统级调试与高级功能
查看设备信息远不止adb shell getprop这么简单。我常用的完整配置快照命令是:
adb shell cat /system/build.prop adb shell dumpsys battery adb shell settings list global这组命令能获取硬件参数、电池状态和全局设置,写兼容性测试报告时特别有用。
模拟用户操作可以自动化测试流程,比如解锁屏幕并启动应用:
adb shell input keyevent 26 adb shell input swipe 300 1000 300 500 adb shell am start -n com.example.app/.MainActivityinput命令支持tap/swipe/text等操作,配合am命令能实现完整的场景测试。记得有次测试登录流程,我用脚本自动填充了100组测试账号。
系统截图和录屏虽然简单但很实用,adb exec-out screencap -p > screen.png直接保存PNG到电脑,比手机截图再传输方便得多。录屏命令adb shell screenrecord /sdcard/demo.mp4默认3分钟,适合记录BUG复现过程。