Kotlin开发Android时Webview加载assets HTML报ERR_FILE_NOT_FOUND如何解决
问题根因
file:///android_asset/是Android系统约定的APK内置assets资源访问路径,该路径报错仅说明打包后APK内不存在对应路径的文件,或路径配置存在规则性错误。你尝试使用的./src/main/assets/路径属于开发PC的本地项目路径,APK安装到设备后不存在该目录结构,仅调试阶段模拟器可能因本地调试映射临时生效,完全不符合生产环境要求,必须弃用。
分步排查方案
第一步:确认assets目录位置正确
默认配置下assets目录必须放在src/main/路径下,与java/、res/目录平级,禁止放到res/或其他子目录内。如果是多模块项目,需确认html文件放在主模块的assets目录,或依赖模块的assets配置已正确导入主模块。第二步:核对路径大小写完全匹配
Android assets路径严格区分大小写,需确认:- 目录名
Content/的大小写和代码中拼写完全一致,是否实际为小写content/ - 文件名
call.html的大小写和代码中拼写完全一致,是否存在大写后缀.HTML或文件名拼写错误
即使将文件放到assets根目录,也需确认代码中加载的file:///android_asset/call.html和实际文件名大小写完全匹配。
- 目录名
第三步:检查打包配置是否排除了assets资源
打开Module级build.gradle文件,检查是否存在误排除assets的配置:
// 错误配置示例,会导致assets文件被过滤 aaptOptions { ignoreAssetsPattern "!*.html" // 禁止html文件打入assets ignoreAssetsPattern "!Content/" // 禁止Content目录打入assets }
如果开启了资源压缩,添加保留assets的配置:
android { buildTypes { release { shrinkResources true // 可在res/raw/keep.xml添加规则保留所有assets文件 } } }
配置完成后执行clean再rebuild项目,打debug包后解压APK,检查assets/目录下是否存在对应文件,确认文件已正常打入APK。
- 第四步:确认WebView基础配置正确
加载页面之前添加必要的WebView配置:
webView.apply { settings.javaScriptEnabled = true // 调用JS必须开启 settings.allowFileAccess = true webChromeClient = WebChromeClient() // 视频通话功能必须配置WebChromeClient } // 加载正确路径 val filePath = "file:///android_asset/Content/call.html" webView.loadUrl(filePath)
内容的提问来源于stack exchange,提问作者Mauricio
相关产品推荐
相关产品推荐

