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

Android插桩测试如何访问缓存目录?读写files目录报EACCES权限错误如何解决

Android插桩测试私有目录读写权限报错解决方案

问题原因定位

  • 上下文调用错误:你当前使用的InstrumentationRegistry.getInstrumentation().getContext()获取的是测试APK自身的上下文,对应包名是报错信息里的com.some.package.test,测试APK默认不继承主App的权限配置,访问自身私有目录时也会受权限规则限制。
  • legacy存储配置失效:你配置的android:requestLegacyExternalStorage="true"仅对Android 10(API 29)设备生效,Android 11及以上系统该配置会被忽略,分区存储限制依然生效。
  • 测试包权限未正确授予:ADB Idea插件默认仅给主App授予权限,不会同步给测试包授予读写权限,导致测试包访问自身私有目录时被拦截。
  • 目录未主动创建:你当前代码仅初始化了File对象,未主动创建对应目录,系统自动创建目录时也会触发权限校验。

修复步骤

  1. 替换上下文调用
    将测试代码中的上下文获取逻辑替换为被测应用的上下文,如果你需要操作主App的私有目录,使用如下代码:
// 替换原来的getContext()为getTargetContext()
Context con = InstrumentationRegistry.getInstrumentation().getTargetContext();

如果你确实需要操作测试包的私有目录,需要在测试模块的AndroidManifest.xml中单独声明读写权限。
2. 补充权限配置

  • 主App和测试模块的Manifest都添加如下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Android 11及以上如果需要访问公共目录再加这个,私有目录不需要 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
  • 如果是Android 11以上测试设备,可执行ADB命令单独给测试包授权:
adb shell pm grant com.some.package.test android.permission.WRITE_EXTERNAL_STORAGE
adb shell pm grant com.some.package.test android.permission.READ_EXTERNAL_STORAGE
  1. 主动创建目录
    在操作文件前先确保目录创建成功,补充代码如下:
@Test
public void createPDfOk() {
    Context con = InstrumentationRegistry.getInstrumentation().getTargetContext();
    // 先确保files目录存在
    File filesDir = con.getFilesDir();
    if (!filesDir.exists()) {
        boolean dirCreated = filesDir.mkdirs();
        // 可添加断言确认目录创建成功
        assertTrue("目录创建失败", dirCreated);
    }
    File f2 = new File(filesDir, "lorem_ipsum.pdf");
    File f = new File(filesDir, "out.pdf");
}
  1. 检查测试运行配置
    确保build.gradle中测试运行器配置正确:
android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:03