【发布时间】:2019-01-27 14:05:51
【问题描述】:
我在这方面找不到任何具体的资源,Dart 是否被编译到 JVM,或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行,然后在 JVM 内部的 Dart VM 中运行 Dart?
前者更有意义,它符合“无桥”的口头禅,但后者似乎更符合how integration between native & flutter code looks like
【问题讨论】:
我在这方面找不到任何具体的资源,Dart 是否被编译到 JVM,或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行,然后在 JVM 内部的 Dart VM 中运行 Dart?
前者更有意义,它符合“无桥”的口头禅,但后者似乎更符合how integration between native & flutter code looks like
【问题讨论】:
Dart 被编译为可执行的本机机器代码(ARM、Intel、...),并与一些本机平台代码(Java、Kotlin、Objective-C/Swift)捆绑以与本机平台交互。
另见
Flutter 如何在 Android 上运行我的代码?引擎的 C 和 C++ 代码
使用 Android 的 NDK 编译。 Dart 代码(SDK 和 yours) 被提前 (AOT) 编译成原生的 ARM 库。 该库包含在“运行器”Android 项目中,并且整个 东西内置在APK中。启动时,应用程序会加载 Flutter 图书馆。任何渲染、输入或事件处理等都是 委托给编译好的 Flutter 和 app 代码。这类似于 许多游戏引擎的工作方式。
调试模式构建使用虚拟机 (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
【讨论】:
有时你一问就马上找到答案-_- Found this reddit answer
两者都有!
开发时,Flutter 使用 VM,因此您可以获得诸如此类的好东西 热重载。但对于 production,它会编译 (AOT) 为 native ARM 库然后使用 Android 上的 NDK 和 iOS 上的 LLVM 嵌入 本机应用程序(跑步者)。
这就是您在右上角看到调试/慢速模式横幅的原因, 请记住,您正在使用虚拟机。
查看https://flutter.io/faq/#technology
还有https://www.youtube.com/watch?v=FUxV4MIhS3g
附:这并不意味着 Dart VM 不适合生产环境 环境中,您仍然可以在服务器端或长时间运行的环境中使用它 任务,就像 JVM、CRL、Node.js 等。我个人将它用于 HTTP API,非常喜欢它。
【讨论】: