adb进阶指南:文件传输、屏幕快照与录制实战
1. 文件传输adb pull与adb push实战技巧作为安卓开发者最常用的调试工具之一adb的文件传输功能简直是我的救命稻草。记得上周排查一个图片加载异常的Bug时我需要在10台测试设备上快速导出缓存文件进行分析。如果靠传统的数据线拷贝方式估计半天时间就耗在文件管理上了。而用adb命令不到20分钟就搞定了所有设备的文件收集工作。基础操作其实很简单adb pull负责从设备拉取文件到电脑adb push则是将电脑文件推送到设备。但实际工作中会遇到各种特殊情况这里分享几个实用技巧批量传输文件夹直接在路径末尾加斜杠就能传输整个目录。比如要把手机相册全部备份到电脑D盘adb pull /sdcard/DCIM/ D:\Backup\处理特殊字符路径遇到包含空格或中文的路径时记得用引号包裹adb push C:\测试数据\new file.txt /sdcard/下载/测试文件/查看传输进度默认不显示进度条可以先用adb shell ls -l查看文件大小传输大文件时用-p参数显示进度adb pull -p /sdcard/bigfile.zip .最近在小米12上传输4K视频时发现直接adb push会报错no space left其实是安卓11以上版本对/sdcard目录的写入权限做了限制。解决方案是改用Android/data目录adb push video.mp4 /sdcard/Android/data/com.example.test/files/2. 截屏操作screencap的高阶玩法很多新手以为adb截屏就是简单的screencap -p /sdcard/screen.png其实这里面大有学问。去年给公司做自动化测试框架时我研究过各种截屏方案的优劣adb在速度和兼容性上表现最好。标准操作流程adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png ~/Desktop/ adb shell rm /sdcard/screen.png # 清理手机端文件但实际使用时有几个痛点每次要手动输入保存路径多设备连接时需要指定设备序列号截图格式默认为PNG文件较大我的改进方案是写个bash脚本quickcap.sh#!/bin/bash filename$(date %Y%m%d_%H%M%S).jpg adb shell screencap -p /sdcard/$filename adb pull /sdcard/$filename ~/Screenshots/ adb shell rm /sdcard/$filename echo 截图已保存到 ~/Screenshots/$filename特殊场景处理截取长页面配合adb shell uiautomator dump获取页面结构后滚动截屏游戏截屏部分游戏会禁用截屏需要先执行adb shell setprop persist.sys.debug.multi_window true带触摸轨迹adb shell getevent -lt记录触摸事件后叠加到截图3. 屏幕录制screenrecord参数详解相比截屏录屏功能screenrecord的使用场景更加复杂。去年做用户操作行为分析时我测试过各种参数组合对视频质量的影响这里分享实测数据基础命令adb shell screenrecord /sdcard/demo.mp4 # 按CtrlC停止 adb pull /sdcard/demo.mp4关键参数对比参数示例值效果适用场景--size720x1280降低分辨率老旧设备--bit-rate8000000提高画质游戏录制--time-limit60限制时长短流程记录--rotate无旋转画面横屏应用--verbose无显示日志调试用实测发现在小米平板上录制2分钟《原神》游戏默认参数文件大小48MB有明显卡顿--size 1080x1920 --bit-rate 12M文件89MB流畅度提升30%--size 720x1280 --bit-rate 6M文件32MB画质可接受常见问题解决方案录制过早结束检查设备存储空间至少预留200MB视频无法播放尝试用VLC播放器或转码ffmpeg -i input.mp4 -c:v libx264 output.mp4画面撕裂关闭设备智能刷新率功能时间戳错误录制前同步设备时间adb shell date $(date %s)4. 组合技自动化工作流搭建单独使用每个命令已经能提升效率但真正的威力在于组合使用。去年我搭建的自动化测试系统就整合了这些命令典型工作流初始化检测adb wait-for-device adb root adb remount执行测试用例adb shell am start -n com.example.test/.MainActivity异常处理adb shell screenrecord --time-limit 30 /sdcard/error.mp4 adb logcat log.txt结果收集adb pull /sdcard/error.mp4 adb pull /data/data/com.example.test/files/logs/实用脚本示例#!/bin/bash # auto_test.sh test_case$1 timestamp$(date %Y%m%d_%H%M%S) adb shell screencap -p /sdcard/${test_case}_${timestamp}.png adb shell screenrecord --bit-rate 8M --time-limit 60 /sdcard/${test_case}_${timestamp}.mp4 run_test $test_case adb pull /sdcard/${test_case}_${timestamp}.* ./results/ adb shell rm /sdcard/${test_case}_${timestamp}.*这套系统将原本需要手动操作的20多个步骤简化为单个命令执行测试效率提升了8倍。特别是在处理随机崩溃问题时自动录制的视频能清晰重现崩溃前的操作路径。