Android System WebView更新后组件的奇怪渲染

时间:2015-06-10 20:50:57

标签: cordova android-webview famo.us famous-engine

几天前,我们的两个基于Cordova / famo.us的移动应用程序开始使用意外行为渲染NavBar和Scrollview。

我花了一些时间才找到问题的根源,因为这发生在不同的设备上。

从Android 5+ Android系统开始,WebView是一个单独的APK,并且经常更新但无声。

在我们的S5上,Android升级到Android 5.0和S6(Android 5.0.2),webview更新到版本43.0.2357.121。这些升级/更新是我们渲染问题的原因。

其他框架,例如Sencha,甚至报告了应用程序崩溃。

如果您在Android上遇到奇怪的问题,可能需要等待谷歌的更新,而不是试图通过解决方法来修复您的应用。

作为开发时的解决方法,您可以转到应用程序 - >来卸载设备上的webview更新。应用程序管理器 - >全部 - > Android系统WebView。

其他有类似问题的人?

4 个答案:

答案 0 :(得分:4)

自从过去几天以来,我们所有的sencha touch和基于cordova的应用程序都遇到了同样的问题。我们的许多应用程序用户都报告了这种奇怪的行为,很难确定罪魁祸首实际上是对 android系统webview的更新。

原始问题可以在这里查看,因为它们已经被谷歌报道过了。

http://code.google.com/p/chromium/issues/detail?id=481380 https://code.google.com/p/chromium/issues/detail?id=479767

虽然它已经在 WebView 42.0.2311.138 中修复,但已发布到测试频道。我们希望这很快就会稳定下来。

目前@bardu提到的解决方法似乎是唯一可行的解​​决方案。

答案 1 :(得分:2)

我们正在经历同样的事情,这是一个真正的熊诊断。可怕的是,因为这可能意味着我们的几十万用户突然完全崩溃了。我很高兴我们在WebView 43.0发布时的任何时候都没有发布我们的应用程序版本,所以很明显我们没有改变任何东西。

最好的办法是告知用户卸载Android System WebView更新的解决方法,同时访问Google论坛并与他们就此问题进行沟通。麻烦的是,他们可能会要求我们提供特定的代码,以便他们可以指出新行为在某种程度上符合标准,并告诉我们更改代码。这很难,因为我们的应用程序在这个新版本中以50种不同的方式打破。它非常糟糕。我们只能希望数以千计的其他Cordova / PhoneGap应用程序也被破坏,许多开发人员都会联系谷歌并帮助他们看到这一点。但是我们必须参与其中并开始滚动。那么,如果我们都尽力在他们的论坛上向Google表达我们的问题呢?

答案 2 :(得分:1)

您应该结帐https://crosswalk-project.org/,这样您就可以将Chrome网络引擎与您的应用程序一起打包到APK中。因此,您不会遇到这些问题。您可以根据需要更新引擎,并在将其推送给用户之前运行正确的QA。 Crosswalk与各种工具兼容,如Famo.us,Cordova,PhoneGap等等,您可以部署回And4.0。

答案 3 :(得分:0)

我遇到了与上面 OP 问题中描述的问题类似的问题。因此,我将发布对我有用的内容,以帮助其他在部署到 Android 10 的cordova 应用程序中遇到渲染问题的人。基本问题似乎是硬件加速在cordova 使用的WebView 中无法正常工作。为了解决这个问题,我在 AndroidManifest.xml 中禁用了硬件加速。您可以手动编辑文件,然后重新构建 apk 并将其部署到您的 Android 设备/VM。

  • 在 ./platforms/android/app/src/main/AndroidManifest.xml 中找到 AndroidManifest.xml 文件
  • 查找 android:hardwareAccelerated="true" 的所有实例并将其替换为 android:hardwareAccelerated="false"
  • 重新构建 apk 并将其重新安装到您的 Android 设备或 VM。

如果以上解决了您的问题,那就太好了!您可以使用cordova 项目的config.xml 文件中的<edit-config> 标记将修复添加到构建过程中,如下所示:

<?xml version='1.0' encoding='utf-8'?>
<widget id="replace.with.your.app.id" version="replace.with.app.version" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- ... -->

    <!-- https://cordova.apache.org/docs/en/10.x/plugin_ref/spec.html#edit-config -->
    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest">
    <manifest android:hardwareAccelerated="false" />
    </edit-config>
    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
        <application android:hardwareAccelerated="false" />
    </edit-config>

    <!-- ... -->

</widget>

注意 xmlns:android="http://schemas.android.com/apk/res/android" 标记中的 <widget> 属性。这是必需的,以便 gradle 理解 android:hardwareAccelerated 属性。