Android new WebView Fatal Exception: android.content.res.Resources$NotFoundException

1. 背景

项目中采用了 new WebView 的方案初始化,再添加到 WebViewContainer,上线后,报了个崩溃问题,记录下。

2. 问题堆栈

Fatal Exception: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
       at android.content.res.Resources.getText(Resources.java:322)
       at android.content.res.Resources.getString(Resources.java:420)
       at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
       at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
       at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:674)
       at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:823)
       at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:662)
       at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:597)
       at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:319)
       at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:104)
       at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:271)
       at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:131)
       at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:118)
       at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
       at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:115)
       at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:268)
       at android.webkit.WebView.<init>(WebView.java:591)
       at android.webkit.WebView.<init>(WebView.java:526)
       at android.webkit.WebView.<init>(WebView.java:509)
       at android.webkit.WebView.<init>(WebView.java:496)
       at android.webkit.WebView.<init>(WebView.java:486)

问题发生在安卓5.0 的手机上。

3. 原因分析:

Context.getAssets() 和 Context.getResources().getAssets() 返回不相同的 AssetManager 对象。 Context.getAssets()返回的 AssetManager无法访问其他包(包括系统WebView包)中的资源,导致 WebView 崩溃。

4. 解决方案:

网上对该问题的解决:依赖 androidx.appcompat:appcompat:1.1.0,在5.0系统 webview 的存在这样bug,可以升级 androidx.appcompat:appcompat 解决。

此外,如果项目中升级 androidx.appcompat:appcompat  成本高,可以在 WebView Activity 重写方法getAssets,如下:

  @Override
  public AssetManager getAssets() {
    if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
      return getResources().getAssets();
    } else {
      return super.getAssets();
    }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android WebViewAndroid平台上的一个组件,可以在应用程序中嵌入Web页面。当一个Web页面加载失败时,WebView会生成错误信息,并将其显示在控制台上。 根据提供的错误信息:android webview [info:console(2)] \1001: 文件加载失败:default.res.json\", sou",我们可以看出文件default.res.json加载失败了。 出现这个错误的原因可能有多种,比如网络连接问题、文件路径错误、文件权限问题、文件损坏等等。为了解决这个问题,我们可以尝试以下几个步骤: 1. 检查网络连接:确保设备能正常连接到网络,可以尝试切换到其他网络或重启设备。 2. 检查文件路径和权限:确认文件路径正确,并检查应用程序是否具有访问该文件所需的权限。 3. 检查文件是否存在和完整性:确认default.res.json文件存在,并且没有损坏。可以尝试重新下载或替换该文件。 4. 调试代码:查看应用程序的代码,尤其是涉及WebView加载文件的部分,确保代码逻辑正确,没有错误。 如果以上步骤都没有解决问题,可能需要进一步排查错误原因。可以尝试通过查看更详细的错误日志、使用调试工具或搜索类似问题的解决方案来解决该问题。 总之,对于Android WebView出现文件加载失败的错误,我们可以通过检查网络连接、文件路径、文件权限和文件完整性等来解决问题,并在必要时进行代码调试和错误排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值