已配置INTERNET权限的Flutter WebView从Google Play下载后报net::ERR_CACHE_MISS如何排查
排查点清单
检查多环境AndroidManifest合并结果
你当前只提供了app/src/main/目录下的清单文件,需要额外检查app/src/release/下的AndroidManifest.xml:- 是否显式配置了
android:usesCleartextTraffic="false",如果你的WebView需要加载HTTP明文地址,该配置会拦截请求,可能间接触发缓存相关报错 - 是否引入了自定义
networkSecurityConfig,其中的域名拦截、证书校验规则可能限制了WebView的正常请求
你可以直接在本地构建release APK后,用APK Analyzer打开安装包,确认最终合并的清单文件中确实保留了INTERNET权限,没有被其他依赖的配置覆盖。
- 是否显式配置了
验证Google Play AAB分发逻辑是否异常
你上传的是AAB格式包,Google Play会根据用户设备的架构、语言、分辨率拆分分发独立APK,建议做如下校验:- 登录Google Play Console,进入「应用包资源管理器」,下载对应你测试设备的分发APK,解压后确认清单文件是否保留了
INTERNET权限,没有被平台的二次构建逻辑误裁剪 - 本地用bundletool模拟Google Play的拆分逻辑,导出对应你设备架构的单APK安装测试,比如针对arm64架构的设备执行如下命令,确认是否能复现问题:
bundletool build-apks --bundle=build/app/outputs/bundle/release/app-release.aab \ --output=build/app/outputs/bundle/release/app-release-single.apks \ --ks=key/my-release-key.jks \ --ks-pass=pass:mypass \ --ks-key-alias=my-alias \ --key-pass=pass:mypass \ --mode=default \ --device-spec=device_spec.json其中
device_spec.json可以通过bundletool get-device-spec --output=device_spec.json从你测试的设备导出,尽可能模拟Google Play的分发规则。- 登录Google Play Console,进入「应用包资源管理器」,下载对应你测试设备的分发APK,解压后确认清单文件是否保留了
检查WebView缓存配置逻辑
- 确认你的WebView是否配置了非默认的缓存模式,比如
LOAD_CACHE_ONLY,这类配置在应用首次安装没有本地缓存时会直接抛出ERR_CACHE_MISS错误,本地测试时因为你之前安装过应用残留了缓存所以不会触发 - 检查缓存配置的初始化时机,确保所有WebSettings配置在调用
loadUrl之前执行完成,避免异步延迟初始化导致首次加载时缓存规则未生效
- 确认你的WebView是否配置了非默认的缓存模式,比如
校验分区存储权限配置
如果你的应用自定义了WebView的缓存目录到外部存储空间,需要确认是否动态申请了存储权限。本地测试时你可能已经提前授权了权限,而从Google Play新安装的应用未授权时会出现缓存写入失败,触发对应报错。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

