是否可以从adb shell命令读取二进制stdout?例如,如何使用screencap的所有示例包括两个步骤:
adb shell screencap -p /sdcard/foo.png
adb pull /sdcard/foo.png
但是,该服务支持写入stdout。例如,您可以执行以下操作:
adb shell "screencap -p > /sdcard/foo2.png"
adb pull /sdcard/foo2.png
这工作同样好。但是,如何读取ADB的输出呢?我想做的是以下:
adb shell screencap -p > foo3.png
并避免中间写入SD卡。这产生的东西看起来像一个PNG文件(运行字符串foo3.png生成一些与IHDR,IEND等),并且大致相同的大小,但文件被损坏,就图像读者而言。
我也试图这样做使用ddmlib在java和结果是一样的。我会很乐意使用任何必要的图书馆。我的目标是减少获取捕获的总时间。在我的设备上,使用两个命令解决方案,它需要大约3秒获取图像。使用ddmlib和捕获stdout需要不到900ms,但它不工作!
有可能做到这一点吗?
编辑:这是六个文件的hexdump。第一个,screen.png来自stdout,已损坏。第二个,xscreen来自双命令解决方案并工作。图像应该在视觉上相同。
$ hexdump -C screen.png | head
00000000 89 50 4e 47 0d 0d 0a 1a 0d 0a 00 00 00 0d 49 48 |.PN