为什么是Android uiautomator';UIS设备#截图在emulator上始终返回false

为什么是Android uiautomator';UIS设备#截图在emulator上始终返回false,android,Android,使用uiautomator时,截图(文件存储路径)无论传入什么参数,都始终返回false 我尝试过给新文件(dir\u name,File\u name)或新文件(File\u name),两者都不起作用(当然,如果dir\u name不存在,请先给mkdir) 每次它只返回false,emulator上的/data/local/tmp/为空 顺便说一句,我认为这不是权限问题,因为尝试类似的dumpWindowHierarchy可以在那里生成转储文件 提前感谢您的帮助。如果您使用emulator

使用uiautomator时,
截图(文件存储路径)
无论传入什么参数,都始终返回false

我尝试过给
新文件(dir\u name,File\u name)
新文件(File\u name)
,两者都不起作用(当然,如果dir\u name不存在,请先给mkdir)

每次它只返回false,emulator上的/data/local/tmp/为空

顺便说一句,我认为这不是权限问题,因为尝试类似的
dumpWindowHierarchy
可以在那里生成转储文件


提前感谢您的帮助。

如果您使用emulator运行测试,则应在AVD配置中启用“使用主机GPU”。在这次改变之后,它对我起了作用

如果您仍然有问题,可以尝试screencap。它是用于截图的命令行工具。它在两种模拟器设置下都可以工作。要在给定路径中保存屏幕截图,请执行:

如果希望以JPEG格式获取文件,可以省略-p。它们的JPEG屏幕截图更大,但获取它们所需的时间更少。

takeScreenshot()方法适用于4.2及以上版本的android设备

如果设备版本合适,则使用以下代码

File path = new File("/sdcard/filename.png");
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH);
    }
我们可以通过以下命令查看该文件

$ adb shell ls -l /sdcard/name-of-file

谢谢你的回答,它解决了我启用“使用主机GPU”后的问题。是的,屏幕截图功能通常基于渲染方法构建。我的观点是,如果内置函数可以工作,我们就不应该使用外部lib来做同样的事情。有没有办法使用android的UiDevice takeScreeshot方法来做这件事?我尝试在设备上,但也有它失败,并给出了错误的结果总是。该目录已创建,但在调用takeScreeshot方法后仍为空。如何将uiautomator添加到我们的项目中,我需要截屏请帮助我…@kalandar请按照此链接上的步骤操作:足够详细。基本上,为了设置项目,您需要添加JUnit3 lib支持和uiautomator.jar+android.jar。谢谢@Jing li。。。。我会这样做是的,我在我的项目中实现了,但我不能创建UiDevice的对象。。。请给我一些代码样本。。。
File path = new File("/sdcard/filename.png");
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH);
    }
$ adb shell ls -l /sdcard/name-of-file