Dart / Flutter如何编译为Android?

时间:2019-01-27 14:05:52

标签: android dart flutter jvm

我找不到关于此的任何具体资源,Dart是否已编译为JVM,或者Google的团队将Dart VM编译为在JVM上运行,然后在JVM的Dart VM中运行Dart?

前者更有意义,并且与“没有桥梁”的口头禅相呼应,但后者似乎更符合how integration between native & flutter code looks like

2 个答案:

答案 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并真正享受它。