1、Flutter简介
Flutter是Google推出的开源移动UI框架,开发者可以开发一套代码同时运行在Android和IOS两个平台,实现应用的快速开发。Flutter虽然出现较晚,在Google的大力推广下生态正在快速完善,活跃用户也在高速增长,Flutter的版本也在不断更新。
Flutter使用自己的高性能渲染引擎来绘制widget,这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。Flutter使用Skia作为其2D渲染引擎,Skia是Google的一个2D图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前谷歌浏览器和Android均采用Skia作为其绘图引擎。
Flutter使用Dart语言进行开发,最终编译成各个平台的Native代码。架构图如上图所示分为了三层,自上向下依次为:
1)Framework层,使用dart实现,包括常用Widgets、动画、手势等基础组件库。在基础组件库之上,Flutter还提供了 Material 和Cupertino两种视觉风格的组件库。
2)Engine层,其中包括了 Skia引擎、Dart运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到Engine层,然后实现真正的绘制逻辑。
3)Embedder层,是一个嵌入层,通过该层把Flutter嵌入到各个平台。它的主
要工作包括Surface渲染设置、线程设置、以及插件等。
2、平台技术对比
对于体验移动端体验来说,原生开发有明显的优势,但是原生开发存在的缺点也是很明显的,如开发成本高,不同平台必须维护不同代码,且大多数情况下,有新功能更新时只能发版,因此跨平台技术应运而生。到目前为止,跨平台技术主要有H5、React Native(RN)、Weex和Flutter等等。
1)UI渲染
H5通过原生的网页加载控件WebView (Android)或WKWebView(iOS)来加载
Weex和RN将虚拟DOM映射为原生控件,使用原生渲染
Flutter实现了自绘引擎,调用原生系统API渲染
2)性能
H5使用WebView渲染效率较低,很多H5在iOS平台表现尚可,但是在Android上特别是一些低端机上的表现更差。
Weex和RN通过映射生成原生控件,性能较H5有了很大的提高,接近原生应用
Flutter直接调用系统API绘制,且Dart在发布时可以通过AOT生成高效的ARM代码以保证应用性,性能最接近原生
3)动态化
H5实现的是APP需要动态变动的一部分内容,可以随时改变而不用发版。
Weex和RN支持热部署,可以随时更新功能而不需要像原生应用一样发版
Flutter的Release包默认是使用Dart AOT模式编译的,所以不支持动态化
此外,Flutter的热重载可帮助开发者快速地进行测试、构建UI、添加功能并更快地修复错误。在iOS和Android模拟器或真机上可以实现毫秒级热重载,并且不会丢失状态,在开发效率上,要比H5、RN和Weex高。下表是对以上提到的跨平台技术的对比汇总。
框架 | UI渲染方式 | 性能 | 开发效率 | 动态化 |
H5 | WebView渲染 | 一般 | 高 | 支持 |
Weex、RN | 原生控件渲染 | 好 | 中 | 支持 |
Flutter | 调用系统API渲染 | 好 | 高 | 默认不支持 |
3、混合开发方案
具有一定规模的App通常有一套成熟通用的基础库,那么使用Flutter重新从头开发App的成本和风险都较高,因此混编方案成为现有APP使用Flutter开发的选择。
1)官方推荐方案
使用官方推荐方案集成Flutter到已有APP,需要开发者配置Flutter环境并采用Flutter工程结构来作为日常开发。
优点:
可直接在原工程内开发,每次修改代码后,不需要先进行代码同步然后再看效果,可无缝同步到native工程中,即时预览。
不需要单独拆分组件,节省了组件版本开发及发布的成本
缺点:
非常耦合,需要修改原有native工程配置,需要添加特定脚本去编译 Flutter
如果使用pod管理,需要修改xcconfig 配置
团队所有开发成员都必须配置 Flutter 开发环境
2)Flutter 组件化混编方案
该方案的核心是Flutter组件化,项目只需引入Flutter编译后的产物,不需要每次都调用脚本进行编译,也不需要强耦合Flutter环境,只需要有发布开发需求的同学安装Flutter环境即可。
优点:
不需修改原有xcconfig配置。
不需要添加RunScript脚本。
运行不需要依赖Flutter环境。
缺点:
需要单独管理一个flutter私有索引库。
开发加载Flutter页面,首次需要热更新同步Flutter代码。
4、Flutter开源框架
阿里巴巴闲鱼是Flutter的使用及推广者之一,在Flutter开发技术方面
形成了自己的体系,在组件化、Flutter管理、集成等方面都有大量技术输出,并且有多个开源框架。
1)Fish Redux
Fish Redux是闲鱼技术团队在GitHub上开源的,一个基于 Redux 数据管理的组装式flutter应用框架,在解决Flutter集中状态管理的同时,也解决了UI的组件化。特别适用于构建中大型的复杂应用,它最显著的特征是函数式的编程模型、可预测的状态管理、可插拔的组件体系、最佳的性能表现。
开源地址:https://github.com/alibaba/fish-redux
2)AOP for Flutter—AspectD
AspectD是闲鱼技术团队开发的面向Dart的AOP开源框架,可以支持主流的AOP场景。AspectD的原理是基于Dill变换,这种变换面向的是近乎源代码级别的AST对象,不仅强大而且可靠。
开源地址:https://github.com/alibaba-flutter/aspectd
3)FlutterBoost
FlutterBoost主要是为了解决Native App混合模式接入Flutter这个通用问题开发的可复用的Flutter插件,由闲鱼技术团队开发并开源。只要是集成了 Flutter的项目都可以用官方依赖的方式非常方便的以插件形式引入 FlutterBoost,只需要对工程进行少量代码接入即可完成接入。目前FlutterBoost已经在生产环境支撑着在闲鱼客户端中所有的基于Flutter开发业务,为更加复杂的混合场景提供了支持。
开源地址:https://github.com/alibaba/flutter_boost
内容参考来自:
Flutter中文网:https://flutterchina.club/
Flutter实战:https://book.flutterchina.club/
Flutter in Action——闲鱼最佳实践
也许想看
年终了,晋升的为什么不是你?
高精度QPS统计,看完不会你打我!
一文弄懂分布式锁实现
uni-app脚手架踩坑记
好文我在看?