Grab Android screenshot to computer via ADB

There are many ways to take a screen shot on Android device. One simple way to capture the screen on Galaxy Nexus is to simultaneously press and hold  Power and  Volume Down  buttons. The image will be saved in a "Screenshot" directory and accessible via Gallery.

Quite often, however, I need to copy the captured image over to my computer. Usually, I do this with  adb pull  command, but if I'm going to use CLI to retrieve the file, why don't I take the screen shot with it as well?

One method is to use  screencap  command via  adb shell  like so:

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

Not bad, but seems like there's some room for improvement.

Information provided by  screencap -h  indicates that screen shot can be sent to  stdout , but running  adb shell screencap -p > screen.png  results in seemingly corrupt file.

Luckily, I wasn't the first person looking into  this issue . Apparently,  adb shell  is performing an EOL (end-of-line) character conversion, from  LF  (line feed, ' \n ',  0x0A ) to CR+LF  (carriage return followed by line feed, ' \r\n ',  0x0D0A ).

If that sounds familiar, that's because  I've dealt with this before . Unfortunately, this time we're working with binary data, so using  tr -d '\r'  command to remove all  0x0D  will likely corrupt it by also removing bytes that aren't part of the  0x0D0A  sequence. We want to only remove carriage return characters when they are followed by a line feed.

The solution is to use  sed  search and replace as follows:

adb shell screencap -p | sed 's/\r$//' > screen.png

Unfortunately, I found that  sed  fix while works on Ubuntu doesn't work on OS X. This solution using  perl  handles binary search and replace better:

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

Now we have a one-liner that grabs a screen shot from the Android device and stores directly on the computer executing the command. Beautiful.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值