在 Android 5 的 WebView 上支持 WebGL

Supporting WebGL on Android 5's WebView

我有一个 Web 项目(取决于 WebGL),可以在任何浏览器的计算机上运行。现在我正在尝试将此项目作为应用程序在基于 Android 的移动设备 phone 上打开。我使用 WebView 来完成这个。我的 phone (Nexus 3) 有 Android 4.3,正如我后来在 Android 5 之前了解到的那样,WebView 组件不支持 WebGL。从Android5开始,WebView成为依赖Chromium 37版本(可更新)的可更新独立组件,开始支持WebGL。所以我在 Android 4.3 中遇到的错误是预期的。

在此之后,我尝试使用另一个 phone(三星 galaxy S4,上面有 Android 5 和 Chrome 版本 43)。那么应用程序应该运行良好,但在 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. 请问AndroidWebView还不支持WebGL吗,有没有办法打开依赖WebGL的应用程序?

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

我建议你试试人行横道,基于Chromium/blink

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

好吧,我想将其添加为编辑,但没有被接受,所以我添加了我的发现作为答案:

我设法让它在任何带有 Android 4+ 的设备上与 CrossWalk 一起工作,android webviewsony xperia phone 与 [=14] =] 就可以了。我想添加我发现的东西:

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

如果您想要使用 chrome 而不是 android webview,即使是 gpu_blacklist 上的设备,您也必须使用 chrome 版本 37+。要检查它,请打开 chrome,键入 chrome://version。之后打开 chrome,键入 chrome://flags,在该页面中启用 webgloverride software rendering list 字段。有了它,您甚至可以在 gpu_blacklist 上的设备或 android 5 以下 os 的设备上使用 webgl

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

除了 Android 5.0.1 的 Samsung s4 之外,其余所有设备 return webgl true。

  • |联系 9 | Android 5.0 |网络工程 |
  • |连结 6 | 5.1.1 |网络工程 |
  • |宏达电 | 4.4.4 |网络工程 |
  • |三星 Galaxy Note 4 | 5.0.1 |网络工程 |
  • |三星s4 | 5.0.1 | webgl 不工作 |
  • |三星s5 | 6.0 | webgl 有效 |
  • |联系 5 | 6.0 | webgl 有效|
  • |摩托X | 6.0 | webgl 有效 |