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

Android Release版本ExternalStorage无法创建文件/文件夹问题求助

问题核心排查方向

Debug版本功能正常、Google Play Release版本存储写入失败,和Manifest里声明的权限本身无关,核心是Debug和Release构建的默认配置差异、以及对权限配置生效范围的认知偏差导致的,按以下优先级排查:

1. 先排查Release构建的R8混淆/代码压缩问题

Debug构建默认关闭代码压缩、资源压缩、代码混淆,Release构建默认开启R8全量压缩。如果你使用了存储路径解析、SAF存储访问框架相关的工具类/第三方库,没有配置对应混淆keep规则的话,相关类和方法会被R8误裁剪,文件创建逻辑会静默失败,通常只会在日志里输出无权限/文件创建失败,不会报类不存在的明显错误。

快速验证:把模块下build.gradle里Release构建类型的minifyEnabled临时设为false,重新打Release包本地安装测试,如果功能恢复正常,补全对应依赖的混淆规则即可。

2. 排查存储权限的实际生效逻辑问题

你当前的Manifest权限配置存在几个生效范围的误区,现有配置代码如下:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="30" />
<uses-permission
    android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    android:minSdkVersion="30"
    tools:ignore="ScopedStorage" />

android:requestLegacyExternalStorage="true"
  • WRITE_EXTERNAL_STORAGE权限在Android 11(API30)以上已经完全失效,你配置的maxSdkVersion="30"意味着API31+的系统根本不会给你的应用授予该写权限;Android 13(API33)及以上系统,要访问公共存储的媒体文件,需要按需申请READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO三个细分媒体权限,旧的读写权限不生效。
  • android:requestLegacyExternalStorage="true"配置仅对Android 10(API29)系统生效,Android 11及以上系统会直接忽略该配置,强制走分区存储规则。
  • MANAGE_EXTERNAL_STORAGE不是普通运行时权限,无法通过常规的运行时权限申请弹框获取,必须主动跳转系统的「所有文件访问权限」设置页引导用户手动开启。Debug环境下大部分模拟器、测试机会默认给调试应用放开该权限,但Release应用安装后默认是拒绝状态,如果你没有做主动跳转授权的逻辑,根本拿不到该权限。同时注意该权限有严格的Google Play使用场景限制,不符合要求的应用会被直接拒审。

3. 排查Google Play签名与分发配置问题

  • 本地Debug包使用的是IDE生成的调试签名证书,如果你开启了Google Play App Signing功能,上传AAB后Google会对分发的APK做重签名,如果你代码里硬编码了签名哈希做权限校验、或者使用了和签名绑定的存储访问逻辑,重签名后逻辑会直接失效。
  • Android 11+强制启用包可见性过滤,如果你需要访问其他应用关联的存储目录,需要在Manifest中添加<queries>声明对应包名,Debug环境默认放开包可见性限制不会拦截,Release环境会严格执行过滤规则,导致跨应用存储访问失败。
快速修复建议
  • 非必要不要访问公共存储根目录,优先将文件写入应用专属外部存储目录(调用context.getExternalFilesDir()获取路径),该目录不需要申请任何存储权限即可正常读写,可适配所有系统版本,也不会触发Google Play的权限审核限制。
  • 如果确实需要访问公共存储目录,先在代码中加日志打印Environment.isExternalStorageManager()的返回值,确认Release运行时真的拿到了所有文件访问权限,不要仅以Manifest的权限声明作为判断依据。
  • 本地打和Release同签名的安装包直接安装测试,不要通过Google Play分发,如果本地安装的同签名Release包功能正常,问题就出在Google Play的重签名或分发裁剪配置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:57:19