You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ADB命令在Android设备上截取长/滚动截图

ADB实现Android长/滚动截图的可行技术方案

Android系统没有全版本、全ROM通用的单条ADB长截图指令,以下是经过实际验证可落地的实现方案,按适配成本从低到高排序:

方案1:调用系统原生长截图接口(适配成本最低)

从Android 12开始,AOSP原生预留了长截图的服务调用入口,支持该接口的设备(Pixel原生系统、部分跟进标准实现的国产定制ROM)可以直接执行以下命令触发长截图:

adb shell cmd statusbar take-screenshot --long

执行后如果当前前台页面支持系统滚动截图框架,系统会自动完成滚动、拼接全流程,长图会直接保存到系统公共截图目录;如果当前页面不支持长截图(比如页面内容不足一屏、应用禁用了系统长截图能力),命令会退回普通单屏截图逻辑。
注意:部分深度定制ROM没有适配AOSP标准接口,会出现执行命令无响应的情况,这类设备可以尝试查找ROM专属的广播触发指令,比如MIUI的触发指令为adb shell am broadcast -a com.miui.screenshot.action.START_LONG_SCREENSHOT,但这类指令在ROM版本迭代中经常变动,通用性较差,不建议做跨设备适配。

方案2:逐屏截图+自动滚动+本地拼接(全版本/全ROM通用)

这个方案没有系统版本、ROM类型限制,兼容性最高,实现逻辑非常直接:

  • 第一步:获取设备屏幕参数
    执行adb shell wm size拿到设备物理分辨率,比如返回Physical size: 1080x2400,后续模拟滑动时,单次滑动距离设为屏幕有效高度的80%即可(要预留20%左右的重叠区域,避免滑动惯性导致内容漏截)。
  • 第二步:循环截图+滚动
    1. 执行单屏截图命令保存当前帧:adb shell screencap -p /sdcard/part_xx.png(xx按截图序号递增)
    2. 模拟纵向向上滑动,滑动时长设为300ms避免过快滚动导致的动画模糊,示例指令(对应1080*2400分辨率):adb shell input swipe 540 1800 540 400 300
    3. 等待500ms让页面渲染完成,判断是否到达页面底部:对比当前截图和上一张截图的底部区域像素,如果连续两张的对应区域像素完全一致,说明已经滑到底部,终止循环;否则回到第一步继续截取下一帧。
  • 第三步:本地拼接长图
    把所有分段截图拉到本地后,计算相邻两张截图的重叠像素区域,裁掉重复部分后纵向拼接即可。如果页面有吸顶、吸底的固定导航栏,提前把每帧截图里的固定栏区域裁掉,避免长图中重复出现固定栏内容。

实际踩坑提示:如果页面存在自动轮播、视频等动态内容,拼接时可能出现相邻帧重叠区域匹配失败的问题,可以在截图前先暂停页面动效,或者适当调大相邻截图的重叠比例,提升匹配准确率。

方案3:借助第三方工具实现(免自行开发拼接逻辑)

如果不想自行实现滚动边界判断、图像拼接逻辑,可以先在设备上安装支持ADB触发的长截图类工具,给工具开启无障碍权限后,通过ADB发送对应广播指令,工具会自动完成滚动、截图、拼接全流程。这类工具一般已经适配了大部分应用的固定栏、滚动边界识别问题,适配成本比自己写拼接逻辑低很多。

通用限制:所有长截图方案都无法绕过应用的安全截图限制,如果应用给页面添加了FLAG_SECURE标记,任何方式都无法截取到正常页面内容,得到的会是黑屏或者空白截图。

内容的提问来源于stack exchange,提问作者Aleksandr Wake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:09:18