ADB命令实战:从基础操作到自动化脚本的进阶指南

📅 2026/7/16 5:40:04 👁️ 阅读次数 📝 编程学习
ADB命令实战:从基础操作到自动化脚本的进阶指南

1. ADB基础入门:连接设备与基础操作

第一次接触ADB时,我盯着命令行窗口里闪烁的光标,心想这玩意儿能比图形化工具好用?直到有一次手机变砖,ADB成了救命稻草——原来这才是Android开发的"瑞士军刀"。ADB(Android Debug Bridge)本质上是个C/S架构的调试工具,通过adb命令我们可以像操作Linux服务器一样操控Android设备。

设备连接是第一步,这里有两个经典姿势:

  • 有线连接:插上USB线,在开发者选项里打开USB调试。我习惯用adb devices确认连接状态,如果看到unauthorized,记得在手机弹窗点允许
  • 无线连接:先用adb tcpip 5555开启端口,再adb connect 设备IP。有次办公室WiFi不稳定,我直接用手机开热点连,实测延迟比USB还低

基础命令就像工具箱里的螺丝刀,简单但高频使用:

# 查看设备详情(含型号/序列号) adb devices -l # 快速重启设备 adb reboot # 查看系统信息(适合批量测试时记录设备信息) adb shell getprop ro.product.model

文件传输是日常高频操作。有次测试需要批量导入500张图片,图形化工具直接卡死,用adb脚本10秒搞定:

# 推送本地文件到设备 adb push ~/test.jpg /sdcard/DCIM/ # 从设备拉取文件(记得先cd到目标目录) adb pull /sdcard/logs/error.log

遇到remount failed错误?试试adb root后再执行。我在华为设备上就遇到过这个坑,后来发现需要先解锁system分区。

2. 应用管理:从安装卸载到深度控制

应用管理可能是ADB最实用的场景。记得有次测试预装应用兼容性,需要同时安装32位和64位版本,图形化工具根本无法实现,而ADB一行命令搞定:

# 覆盖安装保留数据(-r参数超实用) adb install -r app_v2.apk # 安装到SD卡(老设备救星) adb install -s large_game.apk # 卸载但保留数据(方便调试) adb uninstall -k com.example.demo

批量操作才是ADB的杀手锏。这是我用来批量卸载测试包的脚本:

for pkg in $(adb shell pm list packages | grep "test") do adb uninstall ${pkg#package:} done

权限管理在Android 6.0后变得重要。有次测试权限动态申请,用ADB直接授予权限比手动点快十倍:

# 授予存储权限 adb shell pm grant com.example.app android.permission.READ_EXTERNAL_STORAGE # 撤销相机权限 adb shell pm revoke com.example.app android.permission.CAMERA

通过dumpsys package能挖到宝藏信息。比如查应用版本:

adb shell dumpsys package com.example.app | grep version

输出里的versionCode对应build.gradle配置,versionName就是展示给用户的版本号。

3. 日志与调试:从崩溃分析到性能调优

日志抓取是定位崩溃的必备技能。我习惯用PID过滤日志,比满屏无关信息高效得多:

# 获取目标APP的PID adb shell pidof com.example.app # 按PID过滤日志(支持正则) adb logcat --pid=12345 | grep "NullPointer"

遇到ANR时,dumpsys是救命稻草:

# 抓取ANR详细堆栈 adb shell dumpsys activity processes | grep -A 20 "ANR in" # 查看CPU占用前10的进程 adb shell top -n 1 | head -n 10

性能分析推荐Perfetto全家桶。先在开发者选项开启系统跟踪,复现问题后:

# 抓取性能trace(默认30秒) adb shell perfetto -c :android_cpu -o /data/misc/perfetto-traces/cpu.pftrace # 导出分析(用浏览器打开ui.perfetto.dev) adb pull /data/misc/perfetto-traces/cpu.pftrace

内存泄漏检查我常用dumpsys meminfo

# 监控内存增长 adb shell dumpsys meminfo com.example.app -d

重点关注Native Heap和Java Heap的增长趋势,突然飙升往往意味着泄漏。

4. 自动化实战:脚本编写与高级技巧

当需要重复操作时,就该祭出自动化脚本了。比如自动截图脚本:

#!/bin/bash for i in {1..10} do adb shell screencap -p /sdcard/screen_${i}.png adb pull /sdcard/screen_${i}.png adb shell input swipe 500 1500 500 500 # 模拟滑动 sleep 1 done

输入模拟能实现自动化测试。这是我用来测试登录流程的脚本:

adb shell input text "testuser@example.com" adb shell input keyevent 66 # 回车键 adb shell input text "P@ssw0rd123" adb shell input tap 300 600 # 点击登录按钮

定时任务结合cron更强大。比如每天凌晨抓取性能数据:

0 2 * * * adb shell dumpsys batterystats --reset 0 3 * * * adb shell dumpsys batterystats > /logs/battery_$(date +\%Y\%m\%d).log

WiFi调试在USB端口紧张时特别有用:

adb tcpip 5555 adb connect 192.168.1.100:5555

断开时用adb disconnect,记得关闭防火墙端口。

最后分享个一键清理的实用脚本:

#!/bin/bash # 清理缓存 adb shell pm trim-caches 500M # 停止所有测试包 for pkg in $(adb shell pm list packages | grep "test") do adb shell am force-stop ${pkg#package:} done # 清理日志 adb logcat -c