Cordova在Android设备SD卡读写及目录创建问题求助
解决Cordova在Android 6.0+上SD卡根目录无法创建文件夹的问题
我完全理解你折腾了好几个小时的挫败感——Android 6.0之后的存储权限模型确实给Cordova开发者挖了不少坑,尤其是外部SD卡的访问限制。咱们一步步拆解问题和解决方案:
问题根源:Android存储权限的核心变化
从Android 6.0(API 23)开始,Google对外部存储的访问做了严格限制:
cordova.file.externalRootFolder指向file:///storage/emulated/0是正常的,因为它对应Android原生的Environment.getExternalStorageDirectory()API,这个路径本来就指向内置存储的公共目录,而非外部SD卡。- 即使你拿到了外部SD卡的根目录路径(比如
file:///storage/7EC0-0CEC/),第三方应用也没有直接写入的权限——这是Android为了保护用户数据安全、规范存储布局的强制限制,哪怕你申请了WRITE_EXTERNAL_STORAGE权限也没用,这个权限只能让你访问内置存储和SD卡上的媒体文件。
为什么Android/data/{app-name}/files/可以正常操作?
这个路径对应Cordova的cordova.file.externalDataDirectory,它是应用在外部SD卡上的私有沙箱目录:
- Android系统默认允许应用读写自己的私有沙箱目录,不需要额外申请存储权限(在Android 10+甚至连
READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE都不需要)。 - 这是官方推荐的应用外部存储路径,应用卸载时该目录会被自动清理,不会留下垃圾文件,稳定性和合规性都拉满。
如果必须访问SD卡根目录怎么办?
如果你的业务场景确实需要在SD卡根目录创建文件夹或文件,只能通过以下方式,但要注意风险:
- 申请敏感权限
MANAGE_EXTERNAL_STORAGE:- 在项目的
AndroidManifest.xml中添加权限声明:<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> - 这个权限无法通过常规的运行时权限弹窗获取,必须引导用户跳转到系统设置页面手动开启。你可以借助Cordova的权限插件实现跳转逻辑。
- 在项目的
- 注意上架风险:
Google Play对使用MANAGE_EXTERNAL_STORAGE权限的应用审核非常严格,只有文件管理器、备份工具、媒体编辑类等确实需要全局访问存储的应用才会被通过,普通应用大概率会被拒审。
总结
除非你的应用有不可替代的全局存储需求,否则强烈建议优先使用cordova.file.externalDataDirectory对应的Android/data/{app-name}/files/路径,这是最省心、最合规的解决方案。
内容的提问来源于stack exchange,提问作者Steffen B
相关产品推荐
相关产品推荐

