安卓adb截屏java_用adb命令给安卓设备截屏

作者:汶水一方

2017.08.10

本文软硬件环境

MacBook Pro, OS X El Capitan, 10.11.6

Android Studio v2.3

对于一位Android程序猿来说,截屏是日常工作中很常用的操作。本文介绍一下用adb命令给安卓手机截屏的技巧。

前提:

电脑端已经安装/配置好adb命令

手机用usb线(或其它方式)连接电脑

1. 简单易懂的方法

使用screencap命令,可以实现截屏、保存为文件的功能。

所以,我们可以 (1)用screencap截屏并保存;(2)用adb pull把截屏文件复制到本地电脑;(3)把手机上的截屏文件删除。

adb shell screencap -p /sdcard/screenshot.png

adb pull /sdcard/screenshot.png

adb shell rm /sdcard/screenshot.png

2. 高级方法(难懂但一行搞定)

screencap命令其实是支持stdout的,但是我们尝试adb shell screencap -p >screenshot.png,却得到了损坏的文件。是什么原因呢?

原来,adb shell这个命令在传送文件时,对文件末尾的最后一个字符EOL进行了转换,把LF转换成了CR+LF。我们需要把这儿多出来的CR去掉。

CR = \r = 0x0D

LF = \n = 0x0A

2.1 Ubuntu环境

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

在这条sed命令中,使用正则表达式进行搜索替换,把找到的\r$ ($代表文件末尾)替换掉,等同于删除。

2.2 Mac OS环境

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

上述sed方法在Mac OS中不好用,所以使用perl命令来代替。

在这条perl命令中,使用正则表达式进行搜索替换,把找到的\x0D\x0A (代表CR LF)替换成\x0A(代表LF),达到了删除CR的效果。

然后我写了一个shot.sh脚本,并chmod a+x shot.sh给了它运行的权限。内容如下:

dd=`date +%Y-%m-%d-%h-%M-%s`

adb shell screencap -p /sdcard/screenshot.png

adb pull /sdcard/screenshot.png

adb shell rm /sdcard/screenshot.png

mv screenshot.png $dd.png

echo "Screenshot was saved to "$dd.png

open ./$dd.png -R

open -a Preview $dd.png

这样每次执行./shot.sh就可以了。得到的截屏会按当前日期时间命名,保存为png文件,为方便查看,还会自动打开Finder定位到png文件所在的位置,并自动高亮此文件,同时,还会使用Preview打开这个文件。

测试完美成功!

备注:

为了方便在任何目录使用此命令,在~/.bash_profile中加入一行:

alias shot="~/shot.sh"

然后执行source ~/.bash_profile使之生效即可。

完美!

最后更新:2017.10.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值