参阅书籍:
《Flutter跨平台开发入门与实践》-- 向治洪(著)
目前,移动跨平台技术方案主要分为三类:
第一类是使用原生内置浏览器加载HTML5的Hybrid技术方案,采用此类方案的主要有Cordova、ionic和微信小程序;
第二类是使用JavaScript进行开发,然后使用原生组件进行渲染的方案,采用此类方案的主要有React Native、Weex和快应用;
第三类是使用自带的渲染引擎和自带的原生组件来实现跨平台的方案,采用此类方案的主要是Flutter。
Flutter是一个由Google与社区开发的开源移动应用软件开发工具包。
Flutter不是一个彻底的跨平台技术框架,如果应用开发中涉及混合开发,还需要开发者具备原生开发知识。
Android平台大多使用Java(或Kotlin),iOS平台大多使用Objective-C(或Swift)。
1)跨平台开发
Flutter支持在mac OS、Windows、Linux、Android、iOS以及谷歌公司的Fuchsia操作系统上运行。同时,Flutter可以真正做到一套代码同时运行在Android、iOS和Web平台上,避免过高的开发和维护成本,节约资源。
2)符合不同平台的用户体验
Flutter内置了Material和Cupertino风格的组件,为开发者开发Android和iOS平台风格的应用提供了便捷。同时,Flutter提供的motion API、平滑而自然的滑动效果和平台感知,为用户带来全新体验。
3)响应式框架
使用Flutter的响应式框架和一系列基础组件,可以轻松地完成用户界面(UI)的构建。同时,功能强大且灵活的API可以帮助开发者解决复杂的UI构建问题。
4)跨平台渲染引擎
Flutter使用Skia作为其二维渲染引擎,不需要像React Native那样在JavaScript和Native之间通信,从而减少了性能开销。
5)支持本地访问和插件
通过Flutter提供的插件,开发者可以访问原生平台的API,如蓝牙、相机和Wi-Fi等。同时,Flutter还可以复用Java、Swift或Objective-C代码,访问原生Android和iOS系统的功能。
6)高性能
Flutter采用GPU渲染技术,使用Flutter编写的应用运行画面基本可以达到60帧/秒,因此使用Flutter开发的应用几乎可以媲美原生应用的性能。
7)使用Dart进行应用开发
在即时(Just In Time,JIT)编译模式下Dart的速度与JavaScript基本持平;在静态(Ahead Of Time,AOT)编译模式下运行时,Dart的性能远高于JavaScript。
Flutter在应用开发阶段采用JIT编译模式,避免每次改动代码都需要重新编译的问题,极大地节省了开发时间。而基于AOT发布包,使Flutter在发布时可以通过AOT生成高效的ARM代码,以保证应用性能。
1)master版本
代码是最新的,包含最新的功能和特性,但是代码没有经过测试,可能会出现各种各样的缺陷。
2)dev版本
通过谷歌公司内部测试的最新版本,测试只是最基础的测试,一旦发现有严重的阻塞性的缺陷,这个版本就会被废弃。
3)beta版本
每个月初Flutter团队会将上一个稳定的dev版选为beta版进行发布,此版本通常是经过线上运行的dev版,没有新的、严重的缺陷。
4)stable版本
是从beta版本中选出的版本,一个季度更新一次或多次。
总体来说,用于正式的生产环境一定要选stable版。
Flutter是一个分层结构框架,每一层都建立在前一层的基础上。它主要包括三大层级,Framework(视图层)、Engine(引擎层)和Embedder(嵌入层),其中App都是基于Framework开发并运行在Engine层上的。
是一个由Dart实现的软件开发工具包(Software Development Kit,SDK),它提供了一整套自下而上的基础库。
1)底下两层:Foundation、Animation、Painting、Gestures被合并为Dart UI层,对应Flutter中的dart:ui包,它是引擎暴露的底层UI库,提供动画、手势识别及图形绘制功能。
2)Rendering层:抽象的布局层,负责构建UI对应的树结构。当UI树上的元素发生变化时,它会计算出有变化的部分并更新UI树,最终将UI树绘制到屏幕上展示给用户,整个过程类似于React中的虚拟文档对象模型(DOM)。
3)Widgets层:Flutter在基础组件库之上,还提供了Material和Cupertino两种视觉风格的组件库。
是一个由C/C++实现的软件开发工具包(SDK),是Flutter的引擎,主要由Skia引擎、Dart运行时和文字排版引擎构成。Skia是开源的图形库,提供适用于多种软硬件平台的API;Dart层包含了在Dart运行时的垃圾收集、JIT编译、AOT编译;Text则负责文本渲染。
当Framework层调用dart:ui包时,最终都会走到Engine层,然后由Engine层实现真正的绘制逻辑。
Embedder层能确保各平台的兼容性。在Android和iOS平台上,Embedder层负责将上层完美地嵌入到它们中。上层只提供画布,所有内容的绘制渲染逻辑均在Flutter内部完成,这实现了Flutter App和平台的无关性。