Skip to content

Uniapp在低版本安卓下的样式混乱:如何修复?

734字约2分钟

uniapp安卓css

2024-10-09

某客户聚合支付系统,商户收银app是支付系统的一个子应用,使用uniapp实现,可以同一套代码编译到微信小程序和安卓app。

问题在于应用运行在安卓真机和微信小程序上都很正常,然而安装在汇来米POS机上是会出现样式错乱。

客户说这一款POS机品牌是行业内市场覆盖非常广的,同行也在用,他们家研发的app可以正常运行。

收集到这个信息后,笔者认为这个问题是有解的。既然别人没问题,我们也可以。

看了下POS机的安卓版本是上古时期的5.0版本。怀疑是对CSS新样式的兼容度不够。

Google之后了解到5.0版本的发布时间2014年11月4日,因为uniapp编译出来的app实际上运行在webview里面的,之后确认了安卓5版本的确不支持flex布局。

为了方便开发调试,我们需要先在开发环境复现这个bug。然而POS机硬件并不支持连接到电脑进行USB调试。

调研之后,发现安卓模拟器中的头部品牌,雷电模拟器竟然还提供5.0版本内核的模拟器软件,便从官网下载安装。然后再去uniapp编辑器运行到雷电模拟器,成功运行并复现!

接下来就是实时调试修复方案了。

一开始我选择替代flex布局的方案是grid布局,后者的诞生日期更早,兼容性更好,然而真机运行后并没有解决问题。

我只好使用最原始的布局方案,使用css的float浮动布局,相当于纯手工打造了。

把原始flex布局的css丢给chatgpt之后,稍微修改下,大功告成安卓5样式正常了!

当然,因为uniapp是一套代码多平台编译的,安卓5的样式是修好了,也需要不影响原有正常使用的环境。这就是所谓的回归测试。新功能代码的引入不能影响已有功能的正常运行。

于是我测试了安卓真机、以及微信小程序都能完美适配,至此算完美fix这个bug。

另外,uniapp也提供一个不同于安卓原生webview的浏览器内核,是基于腾讯QQ浏览器内核,据说能抹平低版本安卓webview内核的差异,开发者无需关心兼容问题,以flex布局去写代码,这个内核会帮忙改写成对应环境兼容的方案。听起来很不错,有机会试试这个方案。

uni-app文档 | Andriod X5 Webview