颤动 - 它在幕后如何运作?

时间:2017-05-08 18:17:50

标签: dart flutter

显然,flutter是一个使用一个代码库在iOSAndroid上运行应用程序的框架。但是它如何设法这样做呢?它会编译为本机代码,还是有中级语言或VM参与该过程?我尝试在Github上阅读一些源代码,但我找不到任何东西。

3 个答案:

答案 0 :(得分:14)

使用Dart的AoT编译功能将Dart源代码编译为本机代码。它仍然需要部分Dart VM(一些运行时组件,如垃圾收集),但代码会提前编译为本机代码,因为iOS不允许动态编译。

Flutter也可以呼叫Android并使用仅在Java中提供的Android功能(与iOS相同)。 Flutter支持构建自定义插件(除了许多提供的插件之外)以调用本机平台代码。

答案 1 :(得分:5)

颤振一词是指两个主要的事物/概念

  1. Flutter SDK
  2. Flutter框架

1.Flutter SDK:是一组工具,可让您在一个代码库中为Android和iOS平台构建任何类型的应用。

2.Flutter框架:基本上,它提供了所有预定义的小部件/小部件库,实用程序功能和程序包。

我们知道flutter使用Dart作为编程语言。通过flutter构建/开发的应用程序可以在Android和iOS上运行。因此,我们需要将dart代码编译为本机android / ios代码。

  

编译任务由Flutter SDK完成。

Blockquote

在谈论编译时,有两种操作/编译

  • 静态编译
  • 动态解释

静态编译:在执行之前,静态编译的程序都已转换为机器代码。例如:AOT(提前)-C / C ++。

动态解释:是通过一对一翻译执行的。例如:JIT(及时)-Javascript / Python。


现在,我们知道了dart代码如何转换为机器代码以及两种编译方式。

但是这两种编译与Flutter有何关系?

要知道这一点,我们需要了解几件事。 Flutter不使用任何类型的Web视图或操作系统的本机控件。相反,Flutter使用其自己的高性能渲染引擎(Skia)绘制小部件。

而高性能主要由两点来保证。

  • Dart语言
  • 用于渲染/绘制小部件的自己的引擎

现在我们终于到了重点。在讨论dart语言的编译过程之前,我需要提到JIT&AOT是指程序的运行方式,并且编程语言之间没有密切的关系。某些语言同时支持JIT和AOT,例如Java,Python。

first time - Compiled -> intermediate byte code
later -> byte code will be directly executed

DART运行时和编译器还支持JIT和AOT这两个关键功能的组合。


???如果您有兴趣了解颤振框架结构, Pic Credit: book.flutterchina.club 最下面的两层(基础层和动画层,绘画层,手势层)被合并到一个飞镖UI层dart:ui中。

渲染层负责构建UI树,如果发生任何更改,请比较并更新窗口小部件树。最后在设备屏幕上绘制(类似于React Virtual DOM)。

小部件层是flutter提供的基本组件库。

顶部(Material,Cupertino)是flutter提供的组件库。这就是我们开发人员大部分时间都在处理的事情。

我认为,现在所有人都明白了。祝您编码愉快!

资料来源:book.flutterchina.club,flutter.dev,Maximilianschwarzmüller的颤振课程,Flutter官方YouTube频道。

答案 2 :(得分:2)

How Flutter and Dart Works Together

让我借助此图进行解释:

Flutter是使用Dart编程语言构建的。 Flutter有2个主要组成部分:

  1. Flutter框架。
  2. Flutter SDK。

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