是否可以从adb调用ICS屏幕截图功能?

时间:2012-03-01 15:04:52

标签: android screenshot adb android-4.0-ice-cream-sandwich

我需要能够进行屏幕转储测试,而ICS现在有一个屏幕截图功能,可以通过按下(并按住)音量调低和电源按钮来调用。 有没有办法通过adb脚本化这个功能? (据我所知,它没有公共Java API)。我试图使用java中的KeyEvent模拟电源和音量按钮,我试图使用adb keyevent和adb sendevent但没有成功。我怀疑电源按钮还会产生一些不是用上述方法生成的低级别调用。

所以有人知道是否可以从adb调用该函数? 如果这是不可能的,有人知道源代码中的哪个屏幕截图功能存在?也许我可以通过阅读来解决问题。

更新

用于捕获屏幕的源代码位于名为screenCapture的函数中的“frameworks / base / services / surfaceflinger / services / surfaceflinger / SurfaceFlinger.cpp”中。我不知道是否有可能从jni调用它,但我会尝试,因为如果我可以通过java屏幕截图会很棒。

否则,@ edthethird通过android.amberfog.com/?p=168获得了一个解决方案,可以使用命令行截取屏幕截图。

感谢大家的帮助!

4 个答案:

答案 0 :(得分:10)

以adb命令的形式,以下适用于ICS设备:

adb shell /system/bin/screencap -p /sdcard/img.png
adb pull /sdcard/img.png img.png

请参阅:http://a-more-common-hades.blogspot.com/2012/01/screenshot-command.html

答案 1 :(得分:1)

这与ICS无关,但在eclipse中,请查看Devices标签。最右边有一个小小的相机图标。 (从右到左,它是“盒子”,“线”,“倒三角形”和“相机”。点击此相机拍摄当前所选设备的屏幕截图。

这适用于任何版本的Android,而不仅仅是ICS。

Device View in DDMS Eclipse

答案 2 :(得分:1)

看到这个问题: Screenshot of the Nexus One from adb?

基本上,您可以使用adb拉动帧缓冲区并自行将其转换为可用图像,或者您可以使用Google提供的命令行实用程序。环顾四周我觉得你可能需要调整一下这个实用程序才能让它在更新版本的Android上运行。

正如另一个答案指出的那样,除非您尝试自动化测试,否则从Eclipse中执行此操作可能不那么麻烦。

答案 3 :(得分:1)

在查看源代码之后,有一个库可以完全满足我的需求。 框架\基\ CMDS \撷取画面\ screencap.cpp 该程序可以通过/ system / bin / screencap在android上执行。 所以可以通过Runtime.getRuntime()。exec();

在Android上用Java执行。

缺点是您需要特殊证书才能截取屏幕截图。