我已经读过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来说却不太好。
答案 0 :(得分:5)
Flutter engine在两种不同的模式下使用Dart VM:
flutter run
命令监视主机文件系统中对Dart源的更改,并且在检测到此类更改时,将Dart源快速编译为kernel(中间)格式。然后通过热重载将其同步到设备上运行的引擎,并以JIT模式(Android)或解释模式(iOS)执行。gen_snapshot
运行,它发出AOT ARM机器代码,然后链接到最终应用程序中。您可以在我们的Wiki上找到AOT mode operation的详细说明。请注意,有一堆针对Java的Android平台绑定集,它们通过JNI与引擎进行交互,但是Flutter引擎的核心是用C ++编写并由NDK构建的,因此这些位并不依赖达尔维克/ ART。