我有一个使用Crosswalk的混合
Android应用程序.几个月前我转向Crosswalk,这是一个巨大的生产力提升.我花了很多时间测试不同的Android操作系统版本,并且在HTML5 / CSS3 / ES6实现不完整的情况下遇到的问题要少得多 – 如果我理解正确的话,因为Crosswalk是基于Chromium而不是早期版本的Android.
然而,Crosswalk项目现在已被放弃.我的理解是Android中的原生Webview的后v 5.0实现非常好,以至于Crosswalk已经过时了.
我现在也在考虑放弃Crosswalk – 基于观察到我的目标市场(西欧)Android v 5.0-市场份额是个位数并且快速下降.
在我开始之前,我想我应该在这里问一下. Android v 5.0 WebView是否为HTML5,ES6和CSS3提供了真正平坦的Chrome等级API,或者我是否仍然可能遇到因各种设备供应商对操作系统进行“调整”而导致的未实现功能更糟糕的问题?
提一些具体问题
>我可以期待支持一整套CSS3伪选择器
>我可以假设我可以安全地工作而不使用-webkit样式的供应商前缀
>我是否能够编写使用Object.keys和其他更近期的JS稳定版的JS代码
我无法按版本找到有关Webview全套功能的全面讨论.我非常感谢有关此的任何反馈.
自从我发布这个问题以来,我已经尝试放弃Crosswalk并在运行Android 6的Moto E3Power手机上测试了结果.对于所有意图和目的,该应用程序仍然按预期工作.然而,这远非严格的测试.我正在对这个问题表示赏心悦目,希望能够产生一些明确的答案.
现在已经在两个设备上测试了我的非Crosswalk构建,我遇到了一个紧急问题.我做的一件事是修改cssText.例如
document.getElementById('id').style.cssText =
";transform:rotate(45deg) translate(calc(1024px - 1.35em)) rotate(-45deg);"
在我的Android 6.0 Moto上完美运行并提供预期的结果:
>元素#idrotates 45度
>沿其旋转的X轴滑出
>最后旋转-45度
令人惊讶的是,在运行Android 7.0的HTC Hero上,这不起作用.虽然在添加-webkit-prefix之后我甚至没有尝试过.在这两台设备上,我将Webview升级到Play商店的最新版本.
最佳答案 我想你可以尝试:
if (Build.VERSION.SDK_INT >= 19) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Android 19为WebView提供了Chromium引擎.我猜它在硬件加速方面效果更好.
硬件加速也很有用.您可以在应用程序的不同级别使用它.
申请级别
<application android:hardwareAccelerated="true" ...>
活动水平
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>