Flutter如何将其自己的DartVM用于本机应用程序

时间:2018-10-15 22:33:24

标签: android dart flutter

我已经读过Dart使用自己的DartVM。 因此,Flutter在开发应用程序和AOT时可以使用JIT(用于热重载),将AOT内置到“本机”应用程序( .apk / .ipa )中。

根据两个平台( Android / iOS )的docs

  

提前(AOT)编译为本地ARM库

但是,如果Flutter如何通过Dalvik / ART运行该应用程序,例如在Android上,该如何使用自己的DartVM? VM是否内置在我们的 .apk 中,以便可以交付到真正的Android设备上?

如果DartVM没有用于最终版本,那么GC的东西呢? Flutter倾向于创建许多短期对象,这对于DartVM的Generational GC来说很好,但对ART来说却不太好。

1 个答案:

答案 0 :(得分:5)

Flutter engine在两种不同的模式下使用Dart VM:

  • 在开发时以调试方式运行,flutter run命令监视主机文件系统中对Dart源的更改,并且在检测到此类更改时,将Dart源快速编译为kernel(中间)格式。然后通过热重载将其同步到设备上运行的引擎,并以JIT模式(Android)或解释模式(iOS)执行。
  • 在配置文件或发布模式下运行,Dart源首先被编译为内核中间形式,然后通过gen_snapshot运行,它发出AOT ARM机器代码,然后链接到最终应用程序中。您可以在我们的Wiki上找到AOT mode operation的详细说明。

请注意,有一堆针对Java的Android平台绑定集,它们通过JNI与引擎进行交互,但是Flutter引擎的核心是用C ++编写并由NDK构建的,因此这些位并不依赖达尔维克/ ART。