Android 16(API 35)下WebView初始化触发Resources$NotFoundException崩溃问题求助
Android 16(API 35)下WebView初始化触发Resources$NotFoundException崩溃问题求助
各位好,我最近在开发Android应用时碰到了一个棘手的问题,想请教下大家:
我在Android 16(API 35)的设备上初始化WebView时频繁触发崩溃,而且崩溃发生在加载任何URL之前,刚好是WebView实例创建的阶段。
已尝试的解决手段
- 放弃XML中静态声明WebView,改用纯代码动态创建
- 在添加新的WebView实例前,先清空容器内的所有视图
- 简化WebView配置,只保留最必要的基础设置(比如JS启用、DOM存储等)
崩溃日志
Fatal Exception: android.util.AndroidRuntimeException: android.content.res.Resources$NotFoundException: failed to redirect ResourcesImpl at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:405) at android.webkit.WebView.getFactory(WebView.java:2646) at android.webkit.WebView.ensureProviderCreated(WebView.java:2640) at android.webkit.WebView.setOverScrollMode(WebView.java:2723) at android.view.View.<init>(View.java:6154) at android.view.View.<init>(View.java:6315) at android.view.ViewGroup.<init>(ViewGroup.java:727) at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:56) at android.webkit.WebView.<init>(WebView.java:425) at android.webkit.WebView.<init>(WebView.java:367) at android.webkit.WebView.<init>(WebView.java:349) at android.webkit.WebView.<init>(WebView.java:336) at android.webkit.WebView.<init>(WebView.java:326)
相关代码片段
动态创建WebView的核心代码
private fun loadWebView(link: String) { val container = binding.root.findViewById<FrameLayout>(R.id.webViewContainer) container.removeAllViews() mWebView = WebView(this).apply { layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ) val settings: WebSettings = getSettings() settings.javaScriptEnabled = true settings.domStorageEnabled = true settings.allowFileAccess = true settings.allowContentAccess = true settings.loadsImagesAutomatically = true settings.setSupportMultipleWindows(true) addJavascriptInterface(WebAppInterface(this@MainActivity), "Android") webViewClient = object : WebViewClient() { override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) binding.progressBar.visibility = View.VISIBLE } override fun onPageFinished(view: WebView, url: String) { super.onPageFinished(view, url) binding.progressBar.visibility = View.GONE } override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest? ): Boolean { view?.loadUrl(request?.url.toString()) return true } } webChromeClient = object : WebChromeClient() { override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean { Log.d("WebView", "Console message: ${consoleMessage?.message()}") return super.onConsoleMessage(consoleMessage) } override fun onShowFileChooser( webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams? ): Boolean { // File chooser implementation return true } } } container.addView(mWebView) mWebView?.loadUrl(link) }
与WebView交互的Javascript接口类
class WebAppInterface(private val mContext: Context) { @JavascriptInterface fun showToast(toast: String) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show() } }
我的疑问
- 这是Android 16与WebView初始化相关的已知问题吗?
- 有没有针对动态创建WebView时出现的
Resources$NotFoundException的可行 workaround? - 在Android 16上,我是不是应该换一种WebView初始化的方式?
- 这个问题会不会和WebView的版本兼容性有关?




