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 # 按Ctrl+C停止 adb pull /sdcard/demo.mp4关键参数对比:
| 参数 | 示例值 | 效果 | 适用场景 |
|---|---|---|---|
| --size | 720x1280 | 降低分辨率 | 老旧设备 |
| --bit-rate | 8000000 | 提高画质 | 游戏录制 |
| --time-limit | 60 | 限制时长 | 短流程记录 |
| --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倍。特别是在处理随机崩溃问题时,自动录制的视频能清晰重现崩溃前的操作路径。