2017-01-08 120 views
5

如何通过ADB获取Android屏幕截图?我曾尝试:Android事情:拍摄截图

adb shell screencap -p /sdcard/screen.png 
adb pull /sdcard/screen.png 
adb shell rm /sdcard/screen.png 

adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png 
+0

您是否从Android Studio本身尝试过? – riggaroo

+0

感谢您的想法,不幸的是它会引发一个错误:“从设备获取屏幕截图时出现意外错误:EOF” –

+0

这是否与您的其他问题有关?即这是否与您的非工作屏幕插入或不插入?你有没有连接hdmi屏幕? – Blundell

回答

2

我不能让screepcap工作Android的东西开发者预览版。该命令产生一个0尺寸的文件。这就是说,我推荐以下两种选择:或者使用framebuffer或者录制视频(screenrecord似乎可行),然后用适当的工具将其转换为图像。我会考虑的第一个选项,这样的步骤将是:

  • 帧缓冲拉到主机。请注意,你需要开始adbd为根,以通过权限检查:

    adb root 
    adb pull /dev/graphics/fb0 screenshot 
    
  • 通过你喜欢工具转换原始的二进制图像。我正在使用。由于屏幕分辨率或像素格式不同,下面的命令可能不适用于您。如果是,请进行适当的更改。

    ffmpeg -f rawvideo -pix_fmt rgb565 -s 800x480 -i screenshot screenshot.png 
    
+0

使用'adb shell dumpsys window | grep mUnres'来找出屏幕分辨率。 – Onik

+0

@Andriy Omelchenko第一个地方出了什么问题?错误的屏幕分辨率? 'pix_fmt'的什么价值为你工作? – Onik

+1

是的 - 错误的屏幕分辨率和'-pix_fmt rgb565'对我来说也没有改变。你很酷)Thanx! –

1

看来,因为在Android的东西旧有限的OpenGL版本,由Tatsuhiko Araihere描述没有可能通过ADB得到的截图,但您可以从Android的工作室录制视频(例如,或者通过ADB commands )并且比通过ffmpeg从它抓帧,例如:

ffmpeg -i device-2017-01-23-193539.mp4 -r 1 screen-%04d.png 

其中device-2017-01-23-193539.mp4 - 记录(通过Android Studio中)文件的名称。

+0

我注意到他们没有把OpenGL放入Android的东西 - 相当令人失望 –

+0

@Quintin Balsdon _“我注意到他们没有将OpenGL放入Android的东西”_他们做到了。也就是说,它是'OpenGL ES-CM 1.0',可以用'adb shell dumpsys |查看grep GLES'。 – Onik

+1

我也怀疑这是因为_“旧有限的OpenGL版本”_。我的Android 4.2手机上有'OpenGL ES-CM 1.1','screencap'按预期工作。 – Onik