Android ADB命令实战:从系统调试到应用管理的完整指南
1. ADB基础入门开发者的瑞士军刀第一次接触ADB时我完全被这个黑乎乎的终端窗口吓到了——直到发现它其实是安卓开发的万能钥匙。ADB全称Android Debug Bridge就像一座连接电脑和安卓设备的数字桥梁。想象一下当你用USB线连接手机时ADB就是那根能让你直接触摸到系统核心的无形数据线。安装ADB其实特别简单只需要三步下载Android SDK Platform Tools约10MB解压后配置环境变量用USB线连接手机并开启开发者模式# 检查ADB是否安装成功 adb version记得我第一次调试时遇到的坑必须要在手机的开发者选项里开启USB调试。有些厂商手机比如华为还需要额外开启仅充电模式下允许ADB调试。连接成功后你会看到这样的提示List of devices attached ABCDEF123456 device提示如果遇到设备未授权提示检查手机端是否点击了允许USB调试的弹窗。安全提示千万别乱点始终允许除非你百分百信任当前电脑。2. 系统调试核心命令实战2.1 设备连接管理多设备调试是常态我经常同时连接3-4台测试机。这时候-s参数就是救命稻草# 指定设备执行命令 adb -s ABCDEF123456 shell无线调试才是真香摆脱数据线的束缚后开发效率直接翻倍。先在USB连接状态下执行adb tcpip 5555 adb connect 192.168.1.100:5555实测发现小米设备有个坑重启后需要重新执行上述步骤。建议写个自动化脚本处理#!/bin/bash adb kill-server adb start-server adb tcpip 5555 sleep 2 adb connect 192.168.1.1002.2 日志抓取与分析logcat是我的日常debug利器。这个命令最实用的过滤姿势adb logcat -v time | grep MyApp遇到崩溃时我通常会保存完整日志adb logcat -d crash.log更专业的做法是用-b参数指定缓冲区main主日志默认events系统事件radio射频相关# 抓取ANR日志 adb pull /data/anr/traces.txt2.3 系统状态检查dumpsys就像安卓系统的X光机。有次用户反馈手机发烫我就是用这个命令定位到有个野线程在疯狂运行adb shell dumpsys cpuinfo | grep -A 10 MyApp电池耗电分析也超实用adb shell dumpsys batterystats --reset # 重置统计 adb shell dumpsys batterystats --charged # 查看完整报告内存泄漏排查组合拳adb shell dumpsys meminfo package adb shell procrank # 需要root3. 应用管理全攻略3.1 应用清单掌控列出所有应用时这几个参数特别实用adb shell pm list packages -f # 显示APK路径 adb shell pm list packages -i # 显示安装来源 adb shell pm list packages -u # 包含已卸载应用我常用这个命令批量备份第三方应用adb shell pm list packages -3 | cut -d: -f2 | while read pkg; do apk_path$(adb shell pm path $pkg | cut -d: -f2) adb pull $apk_path done3.2 安装与卸载技巧安装APK的隐藏玩法adb install --abi armeabi-v7a app.apk # 指定CPU架构 adb install --instant app.apk # 免安装模式遇到INSTALL_FAILED_UPDATE_INCOMPATIBLE错误时可以adb uninstall --user 0 package # 系统应用降级 adb install -d -r app.apk # 允许降级安装3.3 应用数据管理清除数据比卸载重装更干净adb shell pm clear package查看应用存储详情adb shell du -h /data/data/package备份应用数据需要rootadb shell run-as package cp -r /data/data/package /sdcard/backup4. 高级调试技巧4.1 界面元素分析获取当前界面XML布局adb shell uiautomator dump /sdcard/window.xml adb pull /sdcard/window.xml解析布局中的关键信息grep -o text[^]* window.xml # 提取所有文本 grep -o resource-id[^]* window.xml # 提取资源ID4.2 性能测试实战启动时间测量adb shell am start -W -n com.example/.MainActivity输出示例Starting: Intent { cmpcom.example/.MainActivity } Status: ok Activity: com.example/.MainActivity ThisTime: 345 TotalTime: 345 WaitTime: 365帧率监控adb shell dumpsys gfxinfo package4.3 输入模拟技巧自动化测试必备# 点击坐标 adb shell input tap 500 500 # 滑动 adb shell input swipe 100 500 100 100 200 # 文本输入不支持中文 adb shell input text hello # 按键事件 adb shell input keyevent 4 # 返回键5. 系统级操作5.1 屏幕控制截图和录屏是必备技能adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png adb shell screenrecord --bit-rate 8000000 /sdcard/demo.mp4调整分辨率适配测试adb shell wm size 1080x1920 adb shell wm density 4205.2 网络调试查看网络状态adb shell ifconfig wlan0 adb shell netstat -tuln端口转发技巧adb forward tcp:8080 tcp:8080 # 本地调试用5.3 特殊模式切换进入fastbootadb reboot bootloader进入recoveryadb reboot recovery线刷模式高通设备adb reboot edl6. 自动化脚本编写6.1 常用脚本模板批量安装APKfor apk in *.apk; do echo Installing $apk adb install -r $apk done自动清理缓存adb shell pm list packages -3 | cut -d: -f2 | while read pkg; do adb shell pm clear $pkg done6.2 结合Python用python调用ADB更灵活import subprocess def run_adb(cmd): return subprocess.check_output(fadb {cmd}, shellTrue).decode() devices run_adb(devices).strip().split(\n)[1:] print(fConnected devices: {len(devices)})6.3 错误处理技巧检查设备连接状态if [ $(adb devices | wc -l) -lt 3 ]; then echo No device connected! exit 1 fi超时重试机制for i in {1..3}; do adb install app.apk break sleep 2 done7. 安全注意事项7.1 权限管理危险权限列表查看adb shell pm list permissions -d -g撤销应用权限adb shell pm revoke package android.permission.CAMERA7.2 调试安全关闭ADB端口防止入侵adb shell setprop persist.adb.tcp.port -1 adb reboot生产环境一定要禁用USB调试可以通过build.prop配置ro.adb.secure1 ro.debuggable08. 疑难问题解决8.1 常见错误代码INSTALL_FAILED_NO_MATCHING_ABISadb install --abi armeabi-v7a app.apkINSTALL_PARSE_FAILED_MANIFEST_MALFORMEDaapt dump badging app.apk # 检查manifest8.2 设备无响应处理强制重启ADB服务adb kill-server adb start-server设备端重启adbdadb shell stop adbd adb shell start adbd8.3 日志分析技巧过滤ANR日志adb logcat -b events | grep am_anr关键错误模式识别E/AndroidRuntime: FATAL EXCEPTION W/ActivityManager: Force finishing activity E/WindowManager: Permission denial9. 性能优化专项9.1 内存优化查看内存占用adb shell dumpsys meminfo package内存泄漏检测adb shell am dumpheap package /data/local/tmp/heap.hprof adb pull /data/local/tmp/heap.hprof9.2 CPU优化CPU使用率监控adb shell top -n 1 | grep package线程分析adb shell ps -T | grep package9.3 电量优化耗电统计adb shell dumpsys batterystats --checkin唤醒锁检测adb shell dumpsys power | grep Wake Locks10. 实战案例解析10.1 自动化测试Monkey压力测试adb shell monkey -p package --throttle 100 -v 5000自定义事件序列adb shell getevent -lt # 记录事件流10.2 批量设备管理多设备同时操作for device in $(adb devices | grep -v List | cut -f1); do adb -s $device install app.apk done10.3 系统调优案例提升滚动流畅度adb shell settings put global window_animation_scale 0.5 adb shell settings put global transition_animation_scale 0.5 adb shell settings put global animator_duration_scale 0.511. 扩展工具链11.1 ADB增强工具scrcpy投屏adb forward tcp:27183 localabstract:scrcpy scrcpy -s ABCDEF12345611.2 图形化工具使用Android Studio的Device File Explorer可以直接浏览设备文件系统比命令行更直观。11.3 插件开发编写ADB插件示例import click click.command() click.argument(package) def cli(package): Show app info info subprocess.check_output( fadb shell dumpsys package {package}, shellTrue ).decode() click.echo(info)12. 版本差异处理12.1 Android 11变化分区存储适配adb shell appops set package LEGACY_STORAGE allow临时禁用SELinuxadb shell setenforce 012.2 厂商定制系统EMUI特殊命令adb shell hidumper -l # 华为专用MIUI日志收集adb shell logcat -b main -b system -b crash -v threadtime miui.log13. 最佳实践总结13.1 命令组合技巧我常用的调试组合命令adb logcat -c adb shell am start -n com.example/.MainActivity adb logcat | grep -E MyApp|Error13.2 效率提升建议创建常用命令的aliasalias adbladb logcat -v time | grep -i使用adb-completion实现命令补全将常用操作封装成Makefile13.3 学习资源推荐进阶学习路径官方文档developer.android.com/studio/command-line/adb源码分析android.googlesource.com/platform/packages/modules/adb社区资源XDA论坛的ADB专题记得定期更新platform-toolssdkmanager --update