**adb** shell /system/bin/screencap -p /sdcard/screenshot.png(保存到SDCard) **adb** pull /sdcard/screenshot.png d:/screenshot.png(保存到电脑)
<div>
</div>

<div>
</div>

<div>
  <div>
    `$ adb shell screencap -p /sdcard/screen.png&lt;br />

$ adb pull /sdcard/screen.png<br /> $ adb shell rm /sdcard/screen.png`

<div>
</div>

<div>
  ## [](https://github.com/bxiaopeng/wirelessqa/blob/master/Android/AndroidTest/Android%E6%88%AA%E5%9B%BE%E5%91%BD%E4%BB%A4screencap.md#%E6%88%AA%E5%9B%BE%E7%9B%B4%E6%8E%A5%E4%BF%9D%E5%AD%98%E5%88%B0%E7%94%B5%E8%84%91)截图直接保存到电脑
  
  <div>
    <div>
      `$ adb shell screencap -p | sed 's/\r$//' &gt; screen.png`
    </div>
  </div>
</div>

<div>
</div>

<div>
  上一个命令没有成功(mac下)
</div>

<div>
  下面这个命令成功了
</div>

<div>
  <div>
    `adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' &gt; screen.png`
  </div>
</div>

<div>
</div>

<div>
</div>

<div>
  执行adb shell 将\n转换\r\n, 因此需要用sed删除多余的\r
</div>

<div>
</div>

<div>
  ## [](https://github.com/bxiaopeng/wirelessqa/blob/master/Android/AndroidTest/Android%E6%88%AA%E5%9B%BE%E5%91%BD%E4%BB%A4screencap.md#%E5%A6%82%E6%9E%9C%E7%9B%B4%E6%8E%A5%E5%BD%93%E5%91%BD%E4%BB%A4%E7%94%A8%E8%BF%98%E5%8F%AF%E4%BB%A5%E7%94%A8-alias-%E5%8C%85%E8%A3%9D%E8%A3%85%E8%B5%B7%E4%BE%86)如果直接当命令用还可以用 alias 包裝装起來:
  
  ```

$ alias and-screencap="adb shell screencap -p | sed 's/\r$//'" $ and-screencap &gt; screen.png

    </div>
    
    <div>
    </div>
    
    <div>
      <div>
        <div>
          以后就可以方便的用and-screencap > 直接将截图保存到电脑上了
        </div>
        
        <div>
        </div>
        
        <div>
        </div>
      </div>
    </div>
    
    <div>
      在android代码中使用adb命令来截屏
    </div>
  </div>
  
  

    直接在PC上cmd下可调用adb shell screencap -p /sdcard/screenshot.png来截屏,截取到的内容将包括在线视频等原本需要单独处理的内容。
  

  
  

    使用过在ondraw()里面获取cache或者view来截取屏幕,但那样无法获取在线视频内容,但是通过在PC上调用adb命令,可以截取屏幕,因此想到在android代码中运行cmd里面的命令行,将图片保存起来即可。
  

  
  

    下面的只是初步代码,适用于有root权限的机器(暂时没有时间尝试在没有root权限的情况调用,有兴趣的可以自己尝试)
  

</div>

<div>
</div>

<div>
  <div>
    <div>
      这段代码的缺陷在于无法获知什么时候截取完毕屏幕的内容、什么时候保存,因此,我的做法是延时2s去读取指定文件夹下的这个文件。如果有知道解决的,请在后面回复中贴出,让大家一起进步
    </div>
  </div>
</div>

<div>
</div>

<div>
</div>

<div>
</div>

<div>
  public static void savecreen(Activity ac, String name) {
</div>

<div>
          String cmd=&#8221;screencap -p /sdcard/&#8221;+name+&#8221;.png&#8221;;
</div>

<div>
          try {
</div>

<div>
              // 权限设置
</div>

<div>
              Process p = Runtime.getRuntime().exec(&#8220;su&#8221;);
</div>

<div>
              // 获取输出流
</div>

<div>
              OutputStream outputStream = p.getOutputStream();
</div>

<div>
              DataOutputStream dataOutputStream = new DataOutputStream(
</div>

<div>
                      outputStream);
</div>

<div>
              // 将命令写入
</div>

<div>
              dataOutputStream.writeBytes(cmd);
</div>

<div>
              // 提交命令
</div>

<div>
              dataOutputStream.flush();
</div>

<div>
              // 关闭流操作
</div>

<div>
              dataOutputStream.close();
</div>

<div>
              outputStream.close();
</div>

<div>
          } catch (Throwable t) {
</div>

<div>
              t.printStackTrace();
</div>

<div>
          }
</div>

<div>
      }
</div>