Flutter - 它在幕后是如何工作的?
Flutter - How does it work behind the scenes?
显然,flutter 是 运行 应用程序在 iOS
和 Android
上使用一个代码库的框架。但它是如何做到这一点的呢?它会编译为本机代码,还是在该过程中涉及中级语言或虚拟机?我尝试阅读 Github 上的一些源代码,但我找不到任何东西。
使用 Dart 的 AoT 编译功能将 Dart 源代码编译为本机代码。它仍然需要部分 Dart VM(一些 运行time 组件,如垃圾收集)到 运行,但是代码提前编译为本机代码,因为 iOS 没有不允许动态编译。
Flutter 还可以调用 Android 并使用 Android 仅在 Java 中可用的功能(与 iOS 相同)。 Flutter 支持构建自定义插件(除了许多提供的插件之外)以调用原生平台代码。
让我借助这张图来解释一下:
Flutter 是使用 Dart 编程语言构建的。
Flutter 有 2 个主要组件:
- Flutter 框架。
- 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
术语Flutter指的是两大things/concepts
- Flutter SDK
- Flutter 框架
1.Flutter SDK: 是一组工具,可让您为 Android 和 iOS 平台构建任何类型的应用程序在一个代码库中。
2.Flutter 框架: 基本上它提供了所有预定义的 widgets/widget 库、实用函数和包。
我们知道 flutter 使用 Dart 作为编程语言。 Flutter 的应用 build/developed 可以在 Android 和 iOS 上 运行。因此,我们需要将 dart 代码编译为本机 android/ios 代码。
And the compilation task is done by Flutter SDK.
说到编译,有两种operation/compilation
- 静态编译
- 动态解释
静态编译:静态编译的程序在执行前全部被翻译成机器码。例如:AOT(提前)- C/C++.
动态解释:是一对一翻译执行的。例如:JIT(准时制)- Javascript/Python.
现在我们知道了dart代码如何转换为机器码,以及两种编译方式。
但是这两种编译跟Flutter有什么关系呢?
要知道这一点,我们需要了解几件事。 Flutter 不使用任何类型的 Web 视图或操作系统的本机控件。相反,flutter 使用它自己的高性能渲染引擎(Skia)来绘制小部件。
而高性能主要靠两点来保证。
- Dart 语言
- 拥有 render/draw 小部件的引擎
现在我们终于进入正题了。在讲dart语言的编译过程之前,需要说明的是,JIT&AOT指的是程序运行s的方式,与编程语言没有强相关。有些语言同时支持 JIT 和 AOT,例如:Java、Python.
first time - Compiled -> intermediate byte code
later -> byte code will be directly executed
DART 运行时间和编译器还支持两个关键功能的组合 - JIT 和 AOT。
???如果您有兴趣了解 Flutter 框架结构 ???
底部两层(Foundation and Animation, Painting, Gestures)合并为dart UI层,dart:ui
.
渲染层负责构建UI树,如果发生任何变化,比较并更新widget树。最后在设备屏幕上绘制(类似于 React Virtual DOM)。
Widgets层是flutter提供的基础组件库
而top(Material, Cupertino)是flutter提供的组件库。这是 where/what 我们开发人员最常处理的问题。
我想,现在大家都清楚了。快乐编码!
更新:2022 年 4 月 23 日
Flutter 的渲染引擎 Skia 使用 Metal 在 iOS 上渲染整个应用程序的 UI。与本机 iOS 开发不同,没有呈现 UI 组件。这一切都是使用 Apple 的 Metal 引擎绘制在屏幕上的。下面是在xcode-
中使用3D调试的证明
来源:book.flutterchina.club,flutter.dev,maximilian schwarzmüller的flutter课程,Flutter官方YouTube频道,@vandadnp
显然,flutter 是 运行 应用程序在 iOS
和 Android
上使用一个代码库的框架。但它是如何做到这一点的呢?它会编译为本机代码,还是在该过程中涉及中级语言或虚拟机?我尝试阅读 Github 上的一些源代码,但我找不到任何东西。
使用 Dart 的 AoT 编译功能将 Dart 源代码编译为本机代码。它仍然需要部分 Dart VM(一些 运行time 组件,如垃圾收集)到 运行,但是代码提前编译为本机代码,因为 iOS 没有不允许动态编译。
Flutter 还可以调用 Android 并使用 Android 仅在 Java 中可用的功能(与 iOS 相同)。 Flutter 支持构建自定义插件(除了许多提供的插件之外)以调用原生平台代码。
让我借助这张图来解释一下:
Flutter 是使用 Dart 编程语言构建的。 Flutter 有 2 个主要组件:
- Flutter 框架。
- 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
术语Flutter指的是两大things/concepts
- Flutter SDK
- Flutter 框架
1.Flutter SDK: 是一组工具,可让您为 Android 和 iOS 平台构建任何类型的应用程序在一个代码库中。
2.Flutter 框架: 基本上它提供了所有预定义的 widgets/widget 库、实用函数和包。
我们知道 flutter 使用 Dart 作为编程语言。 Flutter 的应用 build/developed 可以在 Android 和 iOS 上 运行。因此,我们需要将 dart 代码编译为本机 android/ios 代码。
And the compilation task is done by Flutter SDK.
说到编译,有两种operation/compilation
- 静态编译
- 动态解释
静态编译:静态编译的程序在执行前全部被翻译成机器码。例如:AOT(提前)- C/C++.
动态解释:是一对一翻译执行的。例如:JIT(准时制)- Javascript/Python.
现在我们知道了dart代码如何转换为机器码,以及两种编译方式。
但是这两种编译跟Flutter有什么关系呢?
要知道这一点,我们需要了解几件事。 Flutter 不使用任何类型的 Web 视图或操作系统的本机控件。相反,flutter 使用它自己的高性能渲染引擎(Skia)来绘制小部件。
而高性能主要靠两点来保证。
- Dart 语言
- 拥有 render/draw 小部件的引擎
现在我们终于进入正题了。在讲dart语言的编译过程之前,需要说明的是,JIT&AOT指的是程序运行s的方式,与编程语言没有强相关。有些语言同时支持 JIT 和 AOT,例如:Java、Python.
first time - Compiled -> intermediate byte code
later -> byte code will be directly executed
DART 运行时间和编译器还支持两个关键功能的组合 - JIT 和 AOT。
???如果您有兴趣了解 Flutter 框架结构 ???
dart:ui
.
渲染层负责构建UI树,如果发生任何变化,比较并更新widget树。最后在设备屏幕上绘制(类似于 React Virtual DOM)。
Widgets层是flutter提供的基础组件库
而top(Material, Cupertino)是flutter提供的组件库。这是 where/what 我们开发人员最常处理的问题。
我想,现在大家都清楚了。快乐编码!
更新:2022 年 4 月 23 日
Flutter 的渲染引擎 Skia 使用 Metal 在 iOS 上渲染整个应用程序的 UI。与本机 iOS 开发不同,没有呈现 UI 组件。这一切都是使用 Apple 的 Metal 引擎绘制在屏幕上的。下面是在xcode-
中使用3D调试的证明来源:book.flutterchina.club,flutter.dev,maximilian schwarzmüller的flutter课程,Flutter官方YouTube频道,@vandadnp