使用ADB捕获屏幕

时间:2015-01-04 14:49:56

标签: java android adb screenshot

我正在尝试尽快获取手机屏幕的屏幕截图。 目前,我正在做:

adb shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png         

然而它太慢并且需要3秒钟。 有没有更好的方法来做到这一点?我打算在没有根据的手机上使用此功能。

我可以用于screencap的不同论点是什么?

感谢。

编辑(额外信息):我打算使用此方法将屏幕的实时馈送到我的电脑上。目前的方法有效但速度太慢。我无法使用adb shell screenrecord,因为在录制时我无法访问该视频文件。

6 个答案:

答案 0 :(得分:97)

让它在@OSX和Linux上运行

adb exec-out screencap -p > screen.png

答案 1 :(得分:8)

https://stackoverflow.com/a/37191719/75579以某种方式在Android 7中停止为我工作。所以我必须以手动方式进行,所以我想分享它。

如何安装

  1. 将此代码段放在@IBAction func shareAction(sender: UIButton) { let post = timelineComponent.content[sender.tag] let titleString = post.labelTitle let firstActivityItem = "\(titleString)" let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [firstActivityItem], applicationActivities: nil) self.presentViewController(activityViewController, animated: true, completion: nil) } ~/.bash_profile文件中:

    ~/.profile
  2. 运行snap_screen() { if [ $# -eq 0 ] then name="screenshot.png" else name="$1.png" fi adb shell screencap -p /sdcard/$name adb pull /sdcard/$name adb shell rm /sdcard/$name curr_dir=pwd echo "save to `pwd`/$name" } source ~/.bash_profile命令,

  3. 如何使用

    不指定文件名的用法:

    source ~/.profile

    使用文件名:

    $ snap_screen
    11272 KB/s (256237 bytes in 0.022s)
    Saved to /Users/worker8/desktop/screenshot.png
    

    希望它有所帮助!

    **如果插入多个设备

    ,则无效

答案 2 :(得分:4)

你可以从stdout读取二进制文件而不是将png保存到SD卡然后拉出它:

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

这可以节省一点时间,但不会太多。

来源:Read binary stdout data from adb shell?

答案 3 :(得分:2)

要开始录制设备的屏幕,请运行以下命令:

adb shell screenrecord /sdcard/example.mp4

此命令将使用默认设置开始录制设备的屏幕,并将生成的视频保存到设备上/sdcard/example.mp4文件中的文件中。

完成录制后,在“命令提示符”窗口中按Ctrl + C可停止屏幕录制。然后,您可以在指定的位置找到屏幕录制文件。请注意,屏幕录制会保存到设备的内部存储设备中,而不是保存在计算机上。

默认设置是使用设备的标准屏幕分辨率,以4Mbps的比特率对视频进行编码,并将最大屏幕录制时间设置为180秒。有关可以使用的命令行选项的更多信息,请运行以下命令:

adb shell screenrecord --help

这可以在不使设备生根的情况下工作。希望这会有所帮助。

答案 4 :(得分:2)

利用本文和其他几篇文章中的一些知识,我发现对我来说最有效的方法是:

adb shell 'stty raw; screencap -p'

我在GitHub上发布了一个非常简单的Python脚本,它基本上反映了通过ADB连接的设备的屏幕:

https://github.com/baitisj/android_screen_mirror

答案 5 :(得分:1)

很抱歉告诉你screencap只是一个简单的命令,只接受几个参数,但没有一个能为你节省时间,这里是-h帮助输出。

$ adb shell screencap -h
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.

除了命令screencap之外,还有另一个命令screenshot,我不知道为什么screenshot已从Android 5.0中移除,但它在Android 4.4以下可用},您可以从here查看来源。我没有在两个命令之间做出比较更快的比较,但你可以在现实环境中尝试并做出最终决定。