【问题标题】:Supporting WebGL on Android 5's WebView在 Android 5 的 WebView 上支持 WebGL
【发布时间】:2015-06-15 11:55:13
【问题描述】:

我有一个可在计算机、任何浏览器上运行的网络项目(取决于 WebGL)。现在我正在尝试将此项目作为基于 Android 的手机上的应用程序打开。我使用 WebView 来完成此操作。我的手机(Nexus 3)安装的是 Android 4.3,后来我了解到,在 Android 5 之前,WebView 组件不支持 WebGL。在 Android 5 中,WebView 成为一个可更新的独立组件,它依赖于 Chromium 37 版(可更新)并开始支持 WebGL。所以我在使用 Android 4.3 时遇到的错误是意料之中的。

在此之后,我尝试使用另一部手机(搭载 Android 5 和 Chrome 版本 43 的三星 Galaxy S4)。那么应用程序应该运行良好,但在 WebView 上仍然出现错误。我试过get.webgl.org还是一样的错误:

Error constructing CesiumWidget.

Visit http://get.webgl.org to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers.

详细错误信息如下:

RuntimeError: The browser supports WebGL, but initialization failed.

错误

at new RuntimeError (http://192.168.43.125:8090/TMAPW/lib/Cesium/Build/CesiumUnminified/Cesium.js:10657:19)
at new Context (http://192.168.43.125:8090/TMAPW/lib/Cesium/Build/CesiumUnminified/Cesium.js:96489:19)
at new Scene (http://192.168.43.125:8090/TMAPW/lib/Cesium/Build/CesiumUnminified/Cesium.js:120928:23)
at new CesiumWidget (http://192.168.43.125:8090/TMAPW/lib/Cesium/Build/CesiumUnminified/Cesium.js:130986:25)
at AMouseListener.Map2D.initWidget 

这似乎仍然是一个配置问题,所以我尝试在 Chrome 上而不是在 WebView 上打开它,但仍然是同样的错误。我按照说明在 Chrome 上启用了 WebGL。 `Firefox 工作正常。我有三个问题:

  1. 我似乎做错了什么,我该如何解决?

  2. Android 在 WebView 上仍然不支持 WebGL,有没有办法打开依赖 WebGL 的应用程序?

  3. 有没有其他方法可以将 WebGL 项目作为应用程序打开。 (我读过cordova 和cocoon.js,但不确定是否可以通过这些来完成。)所以如果有一个可以正常工作的,我宁愿直接去。

【问题讨论】:

    标签: java android google-chrome android-webview webgl


    【解决方案1】:

    好吧,我想将其添加为编辑,但未被接受,因此我添加了我的发现作为答案:

    我设法让它在任何带有Android 4+ 的设备上与CrossWalk 和带有sony xperia 的android 5 手机上的android webview 一起工作。我想添加我发现的东西:

    如果你想使用android webview,你的设备必须有android 5+,并且你的设备不能在gpu_blacklist上。我在网上找不到gpu_blacklist 的设备列表,但有一种方法可以了解您的设备是否在gpu_blacklist 中。打开chrome,然后输入chrome://gpu,然后查看reset notification strategy field。如果是0x8252,那么您的设备支持webgl,如果是0x0000,那么您的设备在黑名单中。因此,android 5+ 并且您的设备不在gpu_blacklist 上,您可以将webgl 与android webview 一起使用。

    如果您想使用 chrome 而不是 android webview,即使是在 gpu_blacklist 上的设备,您必须使用 chrome 版本 37+。要检查它,请打开 chrome,输入 chrome://version。在打开 chrome 之后,键入 chrome://flags,在该页面中启用 webgl 和 override software rendering list 字段。这样你就可以使用webgl,即使是gpu_blacklist 上的设备或操作系统低于android 5 的设备。

    如果您的设备无法满足上述要求,就像我的一样,您可以使用CrossWalk 它可以工作。但是,文档组织得不好,除了它自己的文档之外,您找不到太多信息,以防万一您遇到问题。 CrossWalk 起作用的原因是,当您构建 apk 文件时,您可以发送像 --ignore-gru-blacklist 这样的命令行参数。但是,正如文档所述,如果您在 gpu_blacklist 上的设备上使用它,您的应用程序或整个设备可能会冻结。

    【讨论】:

    • 感谢 gpu-blacklist 提示。太糟糕了,人行横道不再如火如荼。
    【解决方案2】:

    我建议你尝试基于 Chromium/blink 的 CrossWalk

    https://crosswalk-project.org/documentation/samples/webgl.html

    【讨论】:

    • 感谢您的回复。我设法通过启用 --ignore-gpu-blacklist 在 Chrome 上完成这项工作,但找不到任何地方为 webview 启用相同的开关(即使 android 5 的 webview 是基于 chrome 的)。我猜我的设备显卡在黑名单中。我开始阅读人行横道,发现我可以在其中更改那个开关。当/如果我能做到这一点,我会反馈。
    【解决方案3】:

    除了带有 Android 5.0.1 的 Samsung s4 之外,其余所有设备都返回 webgl true。

    • |连结 9 |安卓5.0 | webgl 作品 |
    • |连结 6 | 5.1.1 | webgl 作品 |
    • |宏达电 | 4.4.4 | webgl 作品 |
    • |三星 Galaxy Note 4 5.0.1 | webgl 作品 |
    • |三星s4 | 5.0.1 | webgl 不工作 |
    • |三星s5 | 6.0 | webgl 工作 |
    • |连结 5 | 6.0 | webgl 工作|
    • |摩托车 | 6.0 | webgl 工作 |

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多