【问题标题】:Is Flutter Dart compiled native or transpiled to Kotlin or Swift? [closed]Flutter Dart 是编译为原生还是编译为 Kotlin 或 Swift? [关闭]
【发布时间】:2021-09-18 00:05:13
【问题描述】:

打开 APK 文件后,我发现代码是在 Kotlin 中,而不是在 Dart 中。在打开 IPA 文件时,发现 Swift 代码而不是 Dart。

Dart 代码会发生什么变化?是否转译为原生 SDK 语言?

如果是这样,libflutter.so 和 libapp.so 有什么用?假设应用程序现在是原生的,为什么还需要 Dart 运行时?

【问题讨论】:

  • 是的,没错。 Flutter SDK 已经为我们完成了转换工作,只需在 Dart 中编写代码,然后在编译时将其转换为 Kotlin 或 Swift 以在原生平台上运行。
  • 那么 libflutter.so 和 libapp.so 的用途是什么,因为它包含 dart 运行时,因为 dart 代码被转换为本机代码,那么 dart 运行时在引擎 c/c++ 中的用途是什么应用程序自带的

标签: android ios flutter cross-platform


【解决方案1】:

Flutter是谷歌开发的SDK。它是一个 Dart 库,旨在为 GUI 提供原生外观和感觉。这是通过 Flutter Engine 实现的(使用 Google Skia),上次我看到的是用 C++ 构建的。但是,对本机平台的接口调用是通过其特定的 SDK(以及本机语言,例如 Swift 和 Kotlin/Java)完成的。

Dart 既是编程语言又是平台(Dart VM)。还有it can be run in many ways

  1. Dart 虚拟机:在 Windows、macOS 和 Linux 上,使用 Just-in-Time。
  2. Native:使用 dart2native,Dart 可以编译为独立的、单个文件的本机可执行文件。
  3. JavaScript:使用源到源编译器,Dart 代码转换为 JavaScript,并且可以在大多数 Web 浏览器中运行。
  4. AOT / Ahead-of-Time:这是完全原生于移动平台(iOS / Android),主要用于交付到应用商店。

在引擎盖下,有很多坚实的魔法在发生。它可能包括将一些特定于 GUI 的相关代码转换为原生代码。享受吧!

【讨论】:

  • 如果应用程序转换为本机代码,那么应用程序中 Apk 的 lib 文件夹中的 libapp.so 和 libflutter.so 文件有什么用。如果它被转换为原生它可以使用android运行时那么libflutter.so文件的用途是什么,因为libfluter.so包含黑暗的Vm
  • 代码本身仍然是原生的,并不意味着它不再依赖于库。请在我的回复中查看对此类的引用。
  • "(使用 Google Skia)",这就是为什么 Darts 只支持 2D 不支持 3D OpenGL 的原因,到目前为止我需要为任何 3D 本地化?
  • @ShifraSec Skia 是 2D 的,但这并不意味着你不能让 OpenGL 工作,请查看下面的链接。如果您对此仍有疑问,我建议您将其作为自己的问题发布在 StackOverflow 中。 github.com/skui-org/skui/issues/13
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2011-07-01
相关资源
最近更新 更多