You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spoon 2.0.0进行Android UI测试时创建输出目录失败求助

解决Spoon 2.0.0快照在API27模拟器上截图目录创建失败的问题

嘿,这个权限坑我之前在API26+的模拟器上也踩过,结合你说的情况(API19正常、API27报错),核心就是Android 6.0之后的权限模型变化,加上Spoon快照版本没做好适配。给你几个靠谱的解决思路,按顺序试:

  • 先搞定动态权限申请:
    API23开始,WRITE_EXTERNAL_STORAGE是危险权限,必须主动申请。用Espresso的GrantPermissionRule最省心,在测试类里加个Rule就行:

    import android.Manifest;
    import androidx.test.rule.GrantPermissionRule;
    
    public class YourScreenShotTest {
        @Rule
        public GrantPermissionRule storagePerm = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    
        // 你的SpoonRule和测试方法...
    }
    

    这个Rule会自动帮你弹权限请求并授权,不用手动处理弹窗。

  • 检查Manifest权限声明:
    别忘在主App的AndroidManifest.xml里加上权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="28" />
    

    测试模块的Manifest如果有单独配置,也最好补上这条。

  • 换用应用私有存储目录(绕开外部权限):
    如果动态权限还是不行,大概率是API27对公共外部目录的访问限制更严。你可以让Spoon把截图存到应用的私有外部目录,这个目录不需要额外权限就能访问。
    要么在gradle里配置:

    spoon {
        sdCardPath = "${android.applicationVariants.debug.applicationInfo.dataDir}/spoon-screenshots"
    }
    

    要么在测试代码里动态设置:

    Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
    File screenshotDir = new File(appContext.getExternalFilesDir(null), "spoon-screenshots");
    Spoon.setOutputDirectory(screenshotDir.getAbsolutePath());
    
  • 排查Spoon快照版本的问题:
    2.0.0快照可能存在未修复的API适配bug,你可以试试:

    • 切到Spoon稳定版(比如1.7.1)验证是否是快照的问题
    • 看看Spoon的社区有没有类似的issue反馈,说不定有临时补丁

我之前就是用「动态权限+私有目录」的组合解决了API28上的同款问题,你可以先试试前两步,应该能解决大部分情况。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:37:15