我找不到关于此的任何具体资源,Dart是否已编译为JVM,或者Google的团队将Dart VM编译为在JVM上运行,然后在JVM的Dart VM中运行Dart?
前者更有意义,并且与“没有桥梁”的口头禅相呼应,但后者似乎更符合how integration between native & flutter code looks like
答案 0 :(得分:2)
Dart被编译为本机代码(ARM,Intel等)可执行文件,并与某些本机平台代码(Java,Kotlin,Objective-C / Swift)捆绑在一起,以与本机平台进行交互。
另请参见
Flutter如何在Android上运行我的代码?引擎的C和C ++代码
是使用Android的NDK编译的。 Dart代码(SDK和 您的)被提前(AOT)编译到本地ARM库中。 该库包含在一个“运行程序” Android项目中,整个 东西内置在APK中。启动后,该应用会加载Flutter 图书馆。任何呈现,输入或事件处理等都是 委托给已编译的Flutter和应用程序代码。这类似于 许多游戏引擎的工作方式。
调试模式版本使用虚拟机(VM)运行Dart代码(因此 他们显示的“调试”标语提醒人们 较慢)以启用有状态的热重装。
Flutter如何在iOS上运行我的代码?引擎的C和C ++代码为
与LLVM编译。 Dart代码(包括SDK和您的代码)都是 提前(AOT)编译到本地ARM库中。那个图书馆 包含在“运行程序” iOS项目中,并且整个过程都已构建 .ipa。启动后,该应用程序将加载Flutter库。任何 呈现,输入或事件处理等,都委托给 编译Flutter和应用程序代码。这类似于许多游戏的方式 引擎正常工作。
调试模式版本使用虚拟机(VM)运行Dart代码(因此 他们显示的“调试”标语提醒人们 较慢)以启用有状态的热重装。
https://flutter.io/docs/resources/faq#how-does-flutter-run-my-code-on-android
另请参阅https://proandroiddev.com/flutters-compilation-patterns-24e139d14177
答案 1 :(得分:0)
有时候,您在问完答案后立即找到答案-_- Found this reddit answer
两者!
开发时,Flutter使用 VM ,因此您可以获得诸如 热重装。但是对于生产,它会编译(AOT)为本地 然后,ARM 库将Android上的NDK和iOS上的LLVM嵌入 本机应用(运行程序)。
这就是为什么您会在右上角看到调试/慢速模式横幅的原因, 记住您,您正在使用VM。
选中https://flutter.io/faq/#technology
也https://www.youtube.com/watch?v=FUxV4MIhS3g
P.S。这并不意味着Dart VM不适合生产 环境中,您仍然可以在服务器端或长时间运行时使用它 像JVM,CRL,Node.js等任务。我个人将其用于 HTTP API并真正享受它。