如何通过ADB在Windows Subsystem for Android上实现截图操作?
WSA通过ADB完成截图的可行方案
问题原因
Windows cmd/PowerShell的默认输出重定向会自动对ADB返回的二进制流做文本编码转换,破坏PNG文件结构,最终导致生成全白的损坏图片,部分场景下也可能是WSA硬件加速导致的渲染层捕获失败。
可用解决方案
- 方案1:使用PowerShell的二进制输出参数直接写入文件
不使用原生>重定向,指定编码格式直接接收二进制流写入本地,命令如下:
如果是PowerShell 7+版本,也可以使用更简洁的写法:adb exec-out screencap -p | Set-Content "screenshot.png" -Encoding Byteadb exec-out screencap -p -f /dev/stdout > screenshot.png - 方案2:先存到WSA内部存储再pull到本地(兼容性最高)
先将截图保存到WSA的可读写目录,再通过adb pull拉取到Windows,不会涉及跨系统的流编码问题,命令如下:
不需要保留WSA内临时文件的话可以追加删除命令:adb shell screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png .adb shell rm /sdcard/screenshot.png - 方案3:临时关闭WSA硬件加速
上述两个方案执行后仍然得到白图的话,可进入WSA设置→高级设置,关闭「硬件加速」选项,重启WSA后再执行截图命令即可。
内容的提问来源于stack exchange,提问作者weareblahs
相关产品推荐
相关产品推荐

