WebView使用VALIDATION_ERROR_DESERIALIZATION_FAILED使我的应用程序崩溃

时间:2018-08-22 16:24:26

标签: android android-webview

我正在Webview中加载一个小的角度Webapp。除了webpacked捆绑包外,我没有控制权或该应用程序的任何信息。
在该Web应用中的确切时间点,我的整个Android应用因以下日志崩溃:

08-22 09:13:33.980 29145-29191/com.my.app E/chromium: [ERROR:validation_errors.cc(87)] Invalid message: VALIDATION_ERROR_DESERIALIZATION_FAILED
08-22 09:13:33.981 29145-29191/com.my.app E/chromium: [ERROR:render_process_host_impl.cc(4399)] Terminating render process for bad Mojo message: Received bad user message: Validation failed for SynchronousCompositorControlHost::ReturnFrame deserializer [VALIDATION_ERROR_DESERIALIZATION_FAILED]
    [ERROR:bad_message.cc(25)] Terminating renderer for bad IPC message, reason 123
08-22 10:05:25.284 18717-18717/mx.tide.fiuanalyticsapp E/chromium: [ERROR:aw_browser_terminator.cc(86)] Render process (18816) kill (OOM or update) wasn't handed by all associated webviews, killing application.

除了在铬源代码中定义错误的地方之外,我没有在网络上找到任何其他东西,我不知道如何调试此问题,因为直接在移动Chrome浏览器中打开网络应用程序时没有问题。 br /> 因此,您是否知道此错误可能是什么?或者至少是从哪里可以开始调试问题的线索?

4 个答案:

答案 0 :(得分:2)

我遇到了完全相同的问题。我能够发现一个css属性will-change: transform引起了这个问题,但是我不确定为什么会这样,因为该属性正在同一文件的其他地方使用,但不会引起错误。

我能够使用charles代理在网页的响应上设置断点并系统地从html中删除脚本和链接来找到罪魁祸首。最终,我发现通过删除主要的CSS链接,该应用程序不再崩溃。然后,我不得不系统地从该css文件中删除行,直到发现该行破坏了WebView。

我仍然无法弄清楚为什么这行会中断它,但是它设置在html中的jpeg图像上。铬似乎是一个问题。我仍在设法弄清为什么铬有问题。

答案 1 :(得分:1)

尽管我的问题得到了@P的解决。 G.的回答,我想添加解决问题的方法,而不必访问原始的Web应用程序代码,这可能会对其他人有所帮助。

因此,我需要替换引起问题的CSS,因此我下载了原始应用CSS,并对其进行了修复,并将其上传到自己的服务器上。然后,在android应用程序中,我重写了Web视图的shouldInterceptRequest方法,每当该应用程序尝试加载CSS时,我都会用自己的CSS替换它。
  代码:

 mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request){

            String urls = request.getUrl().toString();

            //To prevent the WebView from crashing, we serve our own css modified version
            if( urls.equals("https://originalapphost.com/theircssfile.css")  ) {
                try {
                    URL url = new URL("https://myhost.com/mymodifiedcssfile.css");
                    URLConnection connection = url.openConnection();
                    return new WebResourceResponse(connection.getContentType(), connection.getHeaderField("encoding"), connection.getInputStream());
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

            return super.shouldInterceptRequest(view, request);
        }
    });

此外,我认为拥有一个使Android webview崩溃的CSS列表将非常有帮助。我将从这里开始,如果您找到另一个,请随时在这里评论,我将更新此答案。

  • will-change: transform;
  • filter:url(#blur);

答案 2 :(得分:0)

我们也有类似的问题,经过大量分析后发现,这种情况与CSS文件的宽度有关。

我们以前有这个

 Traceback (most recent call last):
      File "/app/Anaconda3/install/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 304, in _send_until_done
        return self.connection.send(data)
      File "/app/Anaconda3/install/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1729, in send
        self._raise_ssl_error(self._ssl, result)
      File "/app/Anaconda3/install/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1631, in _raise_ssl_error
        raise SysCallError(errno, errorcode.get(errno))
    OpenSSL.SSL.SysCallError: (32, 'EPIPE')

并更改为该名称,更改后即可工作。

.card,
.footer {
    margin: auto;
    max-width: 600px
}

答案 3 :(得分:-1)

我通过禁用硬件加速解决了这个问题。