在Android 5的WebView上支持WebGL
我有一个Web项目(取决于WebGL),它适用于计算机,任何浏览器。 现在我正在尝试将此项目作为基于Android的手机上的应用程序打开。 我使用WebView来实现这一目标。 我的手机(Nexus 3)有Android 4.3,而我之前在Android 5之前了解到,WebView组件不支持WebGL。 在Android 5中,WebView成为可更新的独立组件,依赖于Chromium版本37(可以更新)并开始支持WebGL。 因此,预计我将使用Android 4.3获得错误。
在此之后,我尝试使用另一部手机(三星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工作正常。 我有三个问题:
-
似乎有什么我做错了,我该如何解决?
-
Android仍然不支持WebView上的WebGL,是不是有任何可能的方法来打开依赖于WebGL的应用程序?
-
有没有其他方法可以将WebGL项目作为应用程序打开。 (我读过有关
cordova
和cocoon.js
但不确定是否可以通过这些来完成。)所以,如果有一个工作正常,我宁愿直接去做。
我建议您尝试使用基于Chromium / blink的CrossWalk
https://crosswalk-project.org/documentation/samples/webgl.html
好吧,我想把它添加为编辑,但它不被接受,所以我添加了我的发现作为答案:
我设法使用任何装有Android 4+
设备上的CrossWalk
和带有android 5
的sony xperia
手机的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
上的gpu_blacklist
,也必须使用chrome版本37+。 要检查它,请打开chrome,键入chrome://version
。 在打开chrome之后,键入chrome://flags
,在该页面中启用webgl
并override software rendering list
字段。 有了这个,你可以使用webgl
甚至是gpu_blacklist
上的gpu_blacklist
或者安装了android 5
以下的设备。
如果您的设备无法提供上述要求,例如我的设备,则可以使用CrossWalk
。 但是,文档组织不当,除了自己的文档之外,您找不到太多其他信息,以防您遇到问题。 CrossWalk
工作的原因是当你构建apk
文件时,你可以发送命令行参数,如--ignore-gru-blacklist
。 但是,正如文档所述,如果您在gpu_blacklist
上的设备上使用gpu_blacklist
,您的应用程序或整个设备可能会冻结。
除了三星s4与Android 5.0.1,rest所有设备返回webgl true。
- | Nexus 9 | Android 5.0 | webgl的作品|
- | Nexus 6 | 5.1.1 | webgl的作品|
- | htc | 4.4.4 | webgl的作品|
- | 三星galaxy note 4 | 5.0.1 | webgl的作品|
- | 三星s4 | 5.0.1 | webgl不起作用
- | 三星s5 | 6.0 | webgl的作品|
- | Nexus 5 | 6.0 | webgl的作品|
- | MotoX | 6.0 | webgl的作品|