1. 为什么需要掌握Android调试命令
作为一名在移动开发领域摸爬滚打多年的老手,我见过太多开发者过度依赖IDE的图形界面操作。当遇到真机调试、性能优化或复杂bug时,命令行工具往往能提供更直接高效的解决方案。记得去年我们团队遇到一个诡异的ANR问题,最终就是通过adb shell dumpsys命令锁定了主线程阻塞的堆栈信息。
Android调试命令就像开发者的瑞士军刀,它们可以:
- 绕过IDE限制直接与设备交互
- 批量执行自动化测试任务
- 获取系统底层状态信息
- 在无图形界面环境下进行调试
2. 基础环境配置
2.1 ADB工具安装与配置
ADB(Android Debug Bridge)是调试命令的核心工具链。推荐通过Android Studio的SDK Manager安装最新版Platform Tools:
# 检查adb版本 adb --version # 应该显示类似:Android Debug Bridge version 1.0.41 # 将adb添加到环境变量(Mac/Linux示例) echo 'export PATH=$PATH:~/Library/Android/sdk/platform-tools' >> ~/.zshrc source ~/.zshrc注意:如果遇到设备未授权问题,检查手机是否开启了USB调试模式,并在连接时确认授权对话框。
2.2 常用连接方式
除了USB连接,无线调试更适用于日常开发:
# 先通过USB连接初始化 adb tcpip 5555 # 断开USB后通过IP连接 adb connect 192.168.1.100:5555 # 查看已连接设备 adb devices -l # 输出示例: # List of devices attached # emulator-5554 device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_643. 设备管理实战
3.1 基础信息查询
# 获取设备型号 adb shell getprop ro.product.model # 查看Android版本 adb shell getprop ro.build.version.release # 查询CPU架构 adb shell getprop ro.product.cpu.abi # 综合设备信息(推荐) adb shell dumpsys package | grep -A20 "Package \[android\]"3.2 应用管理技巧
安装/卸载应用是高频操作:
# 安装APK(保留数据) adb install -r app-debug.apk # 卸载应用(保留数据) adb uninstall -k com.example.app # 清除应用数据 adb shell pm clear com.example.app # 查看应用安装路径 adb shell pm path com.example.app4. 日志与调试进阶
4.1 日志过滤技巧
# 基本日志查看 adb logcat # 按标签过滤 adb logcat -s ActivityManager:W MyApp:D # 按进程ID过滤 adb logcat --pid=$(adb shell pidof -s com.example.app) # 带时间戳和颜色输出 adb logcat -v time -v color4.2 高级调试命令
# 查看应用内存占用 adb shell dumpsys meminfo com.example.app # 监控应用启动时间 adb shell am start -W -n com.example.app/.MainActivity # 获取当前Activity堆栈 adb shell dumpsys activity activities | grep -E 'Hist #|ActivityRecord'5. 性能分析实战
5.1 CPU/GPU分析
# 监控CPU使用率(按核心) adb shell top -n 1 | grep -A10 "PID USER" # 获取GPU渲染信息 adb shell dumpsys gfxinfo com.example.app # 生成systrace报告(需Python环境) python ~/Library/Android/sdk/platform-tools/systrace/systrace.py gfx view -o trace.html5.2 网络与电量分析
# 监控网络请求 adb shell tcpdump -i any -s 0 -w /sdcard/capture.pcap # 获取电池统计信息 adb shell dumpsys batterystats --reset # 使用应用一段时间后... adb shell dumpsys batterystats --charged com.example.app6. 自动化测试集成
6.1 输入模拟
# 模拟点击事件 adb shell input tap 500 1000 # 滑动操作 adb shell input swipe 300 1000 300 500 200 # 文本输入 adb shell input text "HelloWorld"6.2 UI自动化
# 获取当前界面XML布局 adb shell uiautomator dump /sdcard/window.xml adb pull /sdcard/window.xml # 通过坐标点击组件 adb shell am instrument -w -r -e debug false -e class com.example.app.TestClass com.example.app.test/androidx.test.runner.AndroidJUnitRunner7. 疑难问题排查
7.1 ANR分析
# 获取ANR日志 adb pull /data/anr/traces.txt # 监控ANR发生(需要root) adb shell su -c "watch -n 1 'ps -A | grep \"anr\"'"7.2 崩溃分析
# 查看Java崩溃日志 adb logcat *:E # 获取Native崩溃信息 adb shell dmesg | grep -i "crash" # 生成堆转储文件 adb shell am dumpheap com.example.app /sdcard/heap.hprof adb pull /sdcard/heap.hprof8. 高级技巧与工具链
8.1 常用Shell命令封装
建议创建~/.adb_aliases文件:
alias apkinfo='adb shell dumpsys package | grep -A20 "Package \["' alias clearsf='adb shell pm clear com.example.app && adb shell am force-stop com.example.app' alias uilayout='adb exec-out uiautomator dump /dev/tty'8.2 第三方工具推荐
scrcpy:通过adb实现手机投屏控制
brew install scrcpy scrcpy --serial 设备IDAndroid Debugger (adb-Enhanced):
npm install -g adb-enhanced adb logcat -c && adb logcat -v colorWireshark:分析tcpdump抓包文件
9. 实战经验分享
在小米设备上调试时发现,需要额外开启以下设置才能获取完整日志:
adb shell setprop persist.logd.size 16M adb shell setprop persist.logd.filter I遇到权限问题时,可以尝试:
adb shell pm grant com.example.app android.permission.READ_LOGS对于Android 11+设备,受限目录访问需要:
adb shell appops set com.example.app MANAGE_EXTERNAL_STORAGE allow