首页 > 解决方案 > Flutter 如何将自己的 DartVM 用于原生应用程序

问题描述

我读过 Dart 使用它自己的 DartVM。因此,Flutter 可以在开发您的应用程序和 AOT 时使用 JIT(用于热重载之类的事情)将后者构建为“本机”应用程序(.apk/.ipa)。

根据两个平台的文档Android/iOS):

提前 (AOT) 编译到本机 ARM 库中

但是,如果应用程序已经通过 Dalvik/ART 运行,Flutter 如何使用它自己的 DartVM,例如在 Android 上?虚拟机是否内置在我们的.apk中,因此可以交付给真正的 Android 设备?

如果 DartVM 不用于最终构建,那么 GC 的东西呢?Flutter 倾向于创建许多短期对象,这对 DartVM 的分代 GC来说很好,但对 ART 来说就不是很好。

标签: androiddartflutter

解决方案


Flutter 引擎以两种不同的模式使用 Dart VM :

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

请注意,有一组用 Java 编写的 Android 平台绑定通过 JNI 与引擎交互,但 Flutter 引擎的核心是用 C++ 编写并使用 NDK 构建的,因此这些位不依赖于 Dalvik/ART .


推荐阅读