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

发布时间:2026/7/16 5:21:43
ADB命令实战:从基础操作到自动化脚本的进阶指南 1. ADB基础入门连接设备与基础操作第一次接触ADB时我盯着命令行窗口里闪烁的光标心想这玩意儿能比图形化工具好用直到有一次手机变砖ADB成了救命稻草——原来这才是Android开发的瑞士军刀。ADBAndroid 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 --pid12345 | 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 testuserexample.com adb shell input keyevent 66 # 回车键 adb shell input text Pssw0rd123 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).logWiFi调试在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