Cordova 10适配Android SDK 30无法访问本地文件问题求助
解决方案
核心问题确认
你的判断正确,Android 11(SDK 30)起系统WebView的setAllowFileAccess默认值改为false,Cordova Android 10+同步适配了这个默认策略,且未在官方文档中高亮对应的配置项。
可落地修复步骤
- 第一步:添加Cordova原生支持的WebView权限配置
在你config.xml的<platform name="android">节点内新增2个偏好设置:
<preference name="AllowFileAccess" value="true" /> <preference name="AllowUniversalAccessFromFileURLs" value="true" />
前者直接对应WebView的setAllowFileAccess开关,后者解决不同本地文件路径之间的跨域访问限制。
- 第二步:升级适配SDK30的基础插件
你当前使用的cordova-plugin-file@6.0.0未适配Android分区存储规则,会返回不符合WebView安全限制的本地路径,建议升级到7.0及以上版本:
cordova plugin rm cordova-plugin-file cordova plugin add cordova-plugin-file@7.0.0
- 第三步:(可选)强制修改WebView配置
如果上述两步修复无效,可以创建一个仅10行代码的本地Cordova插件,在WebView初始化时强制开启文件访问权限:
Android端Java逻辑:
package com.custom.webviewsetting; import android.webkit.WebSettings; import android.webkit.WebView; import org.apache.cordova.CordovaPlugin; public class WebViewSetting extends CordovaPlugin { @Override protected void pluginInitialize() { WebView webView = (WebView) webView.getEngine().getView(); WebSettings settings = webView.getSettings(); settings.setAllowFileAccess(true); settings.setAllowFileAccessFromFileURLs(true); settings.setAllowUniversalAccessFromFileURLs(true); } }
额外优化建议
- 你当前
config.xml中重复引入了两次cordova-plugin-wkwebview-engine,该插件仅对iOS生效,不影响Android逻辑,建议删除重复声明避免打包冲突。 - 如果你加载的是应用自身沙盒目录(
/storage/emulated/0/Android/data/你的包名/路径下)的文件,无需申请MANAGE_EXTERNAL_STORAGE、读写外部存储权限,开启文件访问开关即可正常加载。 - 如果你需要加载公共目录下的本地文件,建议将
file://路径替换为系统提供的content://URI,完全规避WebView的本地文件访问限制。
内容的提问来源于stack exchange,提问作者Pouf
相关产品推荐
相关产品推荐

