美文网首页
用adb命令给安卓设备截屏

用adb命令给安卓设备截屏

作者: 汶水一方 | 来源:发表于2017-08-11 13:18 被阅读43次

    作者:汶水一方
    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

    相关文章

      网友评论

          本文标题:用adb命令给安卓设备截屏

          本文链接:https://www.haomeiwen.com/subject/oxblrxtx.html