Flutter 编译模式

2020-05-06  本文已影响0人  minhelloworld

在接触到Flutter后,我就在思考一个问题,作为一个跨平台方案,Flutter究竟是如何在不同的CPU架构、不同的操作系统上运行的呢,它采取了怎么的编译策略,对应平台的编译产物是什么呢?本文以Android平台为例,进行了分析整理。

一、基础说明

编程语言要达到可运行的目的需要经过编译,一般地来说,编译模式分为两类:JIT 和 AOT。

二、Dart编译模式

Dart编译模式

三、Flutter编译模式

可以看出来,Flutter将 Dart的编译模式复杂化了,多了不少概念,其实主要是为了解决Flutter在开发阶段、生产阶段的不同开发需求。

开发阶段的编译模式

在开发阶段,我们需要 Flutter的 Hot Reload和 Hot Restart功能,方便 UI快速成型。同时,框架层也需要比较高的性能来进行视图渲染展现。因此开发模式下,Flutter使用了 Kernel Snapshot模式编译。以Android为例,使用如下命令编译:

 flutter build apk --target-platform=android-arm64 --debug

编译完成后,具体的打包产物如下:

Flutter 构建产物分析(Android)

此处和一些博客中的记录有所出入,我理解应该是Flutter在演进过程中带来的差异;

生产阶段的编译模式

在生产阶段,应用需要的是非常快的速度,所以 Android和 iOS target毫无意外地都选择了 AOT打包。以Android为例,使用如下命令编译:

flutter build apk --target-platform=android-arm64 --release

编译完成后,具体的打包产物如下:


Flutter Release模式产物

此外,Flutter还又一种Profile模式,,主要用于性能分析阶段,用于分析真实设备的实际运行性能,跟Release并无太大差异,只是多了对服务扩展的支持,此处就不展开了,有兴趣的同学可以自己Google一下;

四、参考

上一篇下一篇

猜你喜欢

热点阅读