adb进阶指南:文件传输、屏幕快照与录制实战
2026/5/16 13:25:04 网站建设 项目流程

1. 文件传输:adb pull与adb push实战技巧

作为安卓开发者最常用的调试工具之一,adb的文件传输功能简直是我的"救命稻草"。记得上周排查一个图片加载异常的Bug时,我需要在10台测试设备上快速导出缓存文件进行分析。如果靠传统的数据线拷贝方式,估计半天时间就耗在文件管理上了。而用adb命令,不到20分钟就搞定了所有设备的文件收集工作。

基础操作其实很简单adb pull负责从设备拉取文件到电脑,adb push则是将电脑文件推送到设备。但实际工作中会遇到各种特殊情况,这里分享几个实用技巧:

  1. 批量传输文件夹:直接在路径末尾加斜杠就能传输整个目录。比如要把手机相册全部备份到电脑D盘:
adb pull /sdcard/DCIM/ D:\Backup\
  1. 处理特殊字符路径:遇到包含空格或中文的路径时,记得用引号包裹:
adb push "C:\测试数据\new file.txt" "/sdcard/下载/测试文件/"
  1. 查看传输进度:默认不显示进度条,可以先用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

关键参数对比

参数示例值效果适用场景
--size720x1280降低分辨率老旧设备
--bit-rate8000000提高画质游戏录制
--time-limit60限制时长短流程记录
--rotate旋转画面横屏应用
--verbose显示日志调试用

实测发现,在小米平板上录制2分钟《原神》游戏:

  • 默认参数:文件大小48MB,有明显卡顿
  • --size 1080x1920 --bit-rate 12M:文件89MB,流畅度提升30%
  • --size 720x1280 --bit-rate 6M:文件32MB,画质可接受

常见问题解决方案

  1. 录制过早结束:检查设备存储空间,至少预留200MB
  2. 视频无法播放:尝试用VLC播放器,或转码ffmpeg -i input.mp4 -c:v libx264 output.mp4
  3. 画面撕裂:关闭设备"智能刷新率"功能
  4. 时间戳错误:录制前同步设备时间adb shell date $(date +%s)

4. 组合技:自动化工作流搭建

单独使用每个命令已经能提升效率,但真正的威力在于组合使用。去年我搭建的自动化测试系统就整合了这些命令:

典型工作流

  1. 初始化检测
adb wait-for-device adb root adb remount
  1. 执行测试用例
adb shell am start -n com.example.test/.MainActivity
  1. 异常处理
adb shell screenrecord --time-limit 30 /sdcard/error.mp4 & adb logcat > log.txt
  1. 结果收集
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倍。特别是在处理随机崩溃问题时,自动录制的视频能清晰重现崩溃前的操作路径。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询