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

OhM*_*Mad 24 dart flutter

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

Rob*_*bin 24

术语是指两个主要的东西/概念

  1. 颤振SDK
  2. 颤振框架

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

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

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

并且编译任务由 Flutter SDK 完成。

块引用

说到编译,有两种操作/编译

  • 静态编译
  • 动态解读

静态编译:静态编译的程序在执行前都被翻译成机器码。例如:AOT(Ahead of Time) - 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
Run Code Online (Sandbox Code Playgroud)

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


???如果您有兴趣了解颤振框架结构??? 图片来源:book.flutterchina.club 底部的两层(Foundation 和 Animation、Painting、Gestures)合并为一个 dart UI 层,dart:ui.

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

Widgets层是flutter提供的基础组件库。

而top(Material, Cupertino)是flutter提供的一个组件库。这是我们开发人员最常处理的地方/事情。

我想,现在大家都清楚了。快乐编码!

来源:book.flutterchina.club、flutter.dev、maximilian schwarzmüller 的 flutter 课程、Flutter 官方 YouTube 频道。


Gün*_*uer 20

使用Dart的AoT compliation功能将Dart源代码编译为本机代码.它仍然需要运行Dart VM,但代码会提前编译为本机代码,因为iOS不允许动态编译.

Flutter还可以调用Android并使用仅Java提供的Android功能.Flutter支持构建允许调用本机平台代码的自定义插件.

  • 是的,我知道实际的目录.但它有一个开始吗?我之前试过看过它,似乎我看到的每个文件都与编译器无关...... (2认同)
  • 我想它应该都在https://github.com/dart-lang/sdk/tree/master/runtime/vm (2认同)

Dev*_*ine 5

Flutter和Dart如何一起工作

让我在此图的帮助下进行解释:

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

  1. Flutter框架。
  2. Flutter SDK。

Flutter Framework使用Dart作为编程语言,并且Framework具有一组实用程序功能,您可以通过它们在Flutter App中添加UI元素和小部件。

Flutter SDK允许您构建,部署和自定义Flutter应用程序。

Flutter使用Dart

因为Dart是强类型的面向对象编程语言。它具有“提前编译”和“即时编译”功能。

提前编译可使Flutter SDK和Dart生成可在Android和iOS上编译的本机ARM代码。

有关更多详细信息,您可以观看以下视频: Flutter如何工作以及Flutter为什么使用Dart