
1. Android调试命令体系概述作为一名在Android开发领域深耕多年的工程师我深刻体会到调试命令的重要性。ADBAndroid Debug Bridge就像一把万能钥匙能打开Android系统的各种隐藏功能。无论是日常开发调试、性能优化还是线上问题排查熟练掌握这些命令都能让你事半功倍。Android调试命令主要分为六大类设备连接与管理文件系统操作应用包管理日志系统分析系统状态监控高级调试技巧接下来我将结合多年实战经验详细解析每个场景下的核心命令和使用技巧。这些内容不仅适合Android开发新手系统学习对有经验的开发者来说也是一份很好的参考手册。2. ADB核心命令详解2.1 设备连接与管理ADB是连接开发机和Android设备的桥梁。在实际工作中我们经常需要处理多种连接场景# 查看已连接设备含模拟器 adb devices -l # 输出示例 # emulator-5554 device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1 # 192.168.1.100:5555 device product:OnePlus8 model:ONEPLUS_A6000 device:OnePlus6 transport_id:2无线调试是Android 11引入的实用功能摆脱了USB线的束缚# 首先进入开发者选项开启无线调试 adb pair 192.168.1.100:37395 # 输入配对码 adb connect 192.168.1.100:37395注意无线调试虽然方便但在传输大文件时速度可能不如USB稳定建议关键操作还是使用有线连接。多设备管理技巧# 指定设备执行命令 adb -s emulator-5554 install app.apk adb -s ce1234567890abcd shell # 批量操作所有设备 for device in $(adb devices | tail -n 2 | cut -sf 1); do adb -s $device install app.apk done设备重启相关命令adb reboot # 普通重启 adb reboot bootloader # 进入Bootloader模式用于刷机 adb reboot recovery # 进入Recovery模式用于系统恢复2.2 文件系统操作Android文件系统操作是调试中的高频需求特别是处理应用数据时# 查看应用数据目录 adb shell ls -l /data/data/com.example.app/ # 检查存储空间占用 adb shell du -sh /sdcard/Android/data/*文件传输优化技巧# 多线程加速大文件传输Android 5.0 adb -j4 push large_file.apk /sdcard/ # 从设备拉取重要文件 adb pull /data/data/com.example.app/databases/db.sqlite .重要提示访问/data/data目录需要root权限或使用run-as命令adb shell run-as com.example.app ls /data/data/com.example.app/files/临时目录权限设置adb shell chmod 777 /data/local/tmp/ # 用于临时存放调试文件3. 应用包管理与调试3.1 高级安装策略应用安装看似简单但有很多实用技巧# 安装分拆APKSplit APKs adb install-multiple base.apk split_config.en.apk # 覆盖安装并保留数据 adb install -r -t app.apk # -r表示覆盖-t允许测试包 # 静默安装需要系统权限 adb shell pm install -r /sdcard/app.apk避坑指南安装失败时先检查以下几点设备存储空间是否充足是否开启了USB调试是否与其他已安装应用签名冲突目标API级别是否兼容3.2 应用生命周期控制控制应用行为是调试的核心需求# 启动Activity带额外参数 adb shell am start -n com.example.app/.MainActivity --es key value # 启动Service adb shell am startservice -n com.example.app/.MyService # 发送带参数的广播 adb shell am broadcast -a com.example.action.MY_ACTION --ei int_key 123 # 强制停止应用 adb shell am force-stop com.example.app3.3 包信息深度分析了解应用详情有助于问题排查# 查看应用所有组件 adb shell pm dump com.example.app | grep -A 10 Activity Resolver # 查找APK实际安装路径 adb shell pm path com.example.app # 输出package:/data/app/com.example.app-1/base.apk # 检查应用权限 adb shell pm list permissions -d -f com.example.app4. 日志系统与性能监控4.1 Logcat高级用法日志是调试的第一手资料# 按时间戳保存日志 adb logcat -v time logcat_$(date %Y%m%d_%H%M%S).log # 多条件过滤 adb logcat -s MyTag:I Network:E # 显示MyTag的Info及以上Network的Error # 捕获崩溃日志 adb logcat -b crash日志分析技巧# 查找特定进程的日志 adb logcat | grep adb shell pidof com.example.app # 清空日志缓冲区 adb logcat -c4.2 系统状态监控性能问题排查必备命令# CPU使用率监控 adb shell top -m 10 -d 1 # 每秒刷新显示Top10进程 # 内存详细分析 adb shell dumpsys meminfo com.example.app # 重点关注Native Heap和Java Heap # 电池状态检查 adb shell dumpsys battery # 查看电池消耗统计 adb shell dumpsys batterystats --charged | grep Estimated power5. Shell命令实战技巧5.1 设备信息查询# 获取系统版本 adb shell getprop ro.build.version.release # 查看设备型号 adb shell getprop ro.product.model # 网络诊断 adb shell netstat -tuln # 查看开放端口 adb shell ping -c 4 www.example.com5.2 输入模拟与自动化# 精确点击需坐标 adb shell input tap 500 800 # 滑动解锁示例 adb shell input swipe 300 1000 300 500 200 # 最后参数是持续时间(ms) # 常用按键事件 adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_POWER6. 高级调试场景6.1 ANR问题排查ANR(Application Not Responding)是常见问题# 获取ANR日志 adb pull /data/anr/traces.txt # 分析主线程堆栈 grep -A 30 main traces.txt | grep -B 10 com.example.app # 检查CPU负载 adb shell dumpsys cpuinfo | grep -A 5 Load:6.2 内存泄漏分析# 生成堆转储文件 adb shell am dumpheap com.example.app /sdcard/heap.hprof adb pull /sdcard/heap.hprof # 实时内存监控 watch -n 1 adb shell dumpsys meminfo com.example.app | grep TOTAL6.3 性能优化技巧# 检查过度绘制 adb shell setprop debug.hwui.overdraw show adb shell service call activity 1599295570 # 刷新UI # GPU渲染分析 adb shell dumpsys gfxinfo com.example.app7. 实用脚本与自动化将常用命令封装成脚本能极大提升效率#!/bin/bash # 自动安装并启动应用 adb install -r $1 adb shell am start -n $(aapt dump badging $1 | grep package | awk {print $2} | cut -d -f2)/$(aapt dump badging $1 | grep launchable-activity | awk {print $2} | cut -d -f2)日志自动抓取脚本#!/bin/bash while true; do adb logcat -v time | tee -a logcat.log sleep 1 done经过多年实践我总结出最有效的学习方法是将常用命令整理成cheatsheet结合实际项目不断练习。建议新手从基础命令开始逐步掌握高级技巧最终形成自己的调试方法论。