显然,flutter是一个使用一个代码库在iOS
和Android
上运行应用程序的框架。但是它如何设法这样做呢?它会编译为本机代码,还是有中级语言或VM参与该过程?我尝试在Github上阅读一些源代码,但我找不到任何东西。
答案 0 :(得分:14)
使用Dart的AoT编译功能将Dart源代码编译为本机代码。它仍然需要部分Dart VM(一些运行时组件,如垃圾收集),但代码会提前编译为本机代码,因为iOS不允许动态编译。
Flutter也可以呼叫Android并使用仅在Java中提供的Android功能(与iOS相同)。 Flutter支持构建自定义插件(除了许多提供的插件之外)以调用本机平台代码。
答案 1 :(得分:5)
颤振一词是指两个主要的事物/概念
1.Flutter SDK:是一组工具,可让您在一个代码库中为Android和iOS平台构建任何类型的应用。
2.Flutter框架:基本上,它提供了所有预定义的小部件/小部件库,实用程序功能和程序包。
我们知道flutter使用Dart作为编程语言。通过flutter构建/开发的应用程序可以在Android和iOS上运行。因此,我们需要将dart代码编译为本机android / ios代码。
编译任务由Flutter SDK完成。
在谈论编译时,有两种操作/编译
静态编译:在执行之前,静态编译的程序都已转换为机器代码。例如:AOT(提前)-C / C ++。
动态解释:是通过一对一翻译执行的。例如:JIT(及时)-Javascript / Python。
现在,我们知道了dart代码如何转换为机器代码以及两种编译方式。
但是这两种编译与Flutter有何关系?
要知道这一点,我们需要了解几件事。 Flutter不使用任何类型的Web视图或操作系统的本机控件。相反,Flutter使用其自己的高性能渲染引擎(Skia)绘制小部件。
而高性能主要由两点来保证。
现在我们终于到了重点。在讨论dart语言的编译过程之前,我需要提到JIT&AOT是指程序的运行方式,并且编程语言之间没有密切的关系。某些语言同时支持JIT和AOT,例如Java,Python。
first time - Compiled -> intermediate byte code
later -> byte code will be directly executed
DART运行时和编译器还支持JIT和AOT这两个关键功能的组合。
???如果您有兴趣了解颤振框架结构,
最下面的两层(基础层和动画层,绘画层,手势层)被合并到一个飞镖UI层
dart:ui
中。
渲染层负责构建UI树,如果发生任何更改,请比较并更新窗口小部件树。最后在设备屏幕上绘制(类似于React Virtual DOM)。
小部件层是flutter提供的基本组件库。
顶部(Material,Cupertino)是flutter提供的组件库。这就是我们开发人员大部分时间都在处理的事情。
我认为,现在所有人都明白了。祝您编码愉快!
资料来源:book.flutterchina.club,flutter.dev,Maximilianschwarzmüller的颤振课程,Flutter官方YouTube频道。
答案 2 :(得分:2)
让我借助此图进行解释:
Flutter是使用Dart编程语言构建的。 Flutter有2个主要组成部分:
Flutter Framework使用Dart作为编程语言,并且Framework具有一组实用程序功能,您可以通过它们在Flutter应用程序中添加UI元素和小部件。
然后 Flutter SDK允许您构建,部署和自定义Flutter应用。
Flutter使用Dart
因为Dart是强类型的面向对象编程语言。 并且具有提前编译和即时编译的功能。
提前编译可使Flutter SDK和Dart生成可在Android和iOS上编译的本机ARM代码。
有关更多详细信息,您可以观看以下视频: How Flutter Works and Why Flutter uses Dart