2017-01-08 118 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