android - Flutter Dart 是编译为原生还是编译为 Kotlin 或 Swift?
问题描述
打开 APK 文件后,我在 Kotlin 中找到了代码,而不是在 Dart 中。打开 IPA 文件后,发现 Swift 代码而不是 Dart。
Dart 代码会发生什么变化?是否转译为原生 SDK 语言?
如果是这样,libflutter.so 和 libapp.so 有什么用?假设应用程序现在是原生的,为什么它仍然需要 Dart 运行时?
解决方案
Flutter是 Google 开发的 SDK。它是一个 Dart 库,旨在为 GUI 提供原生外观。这是通过 Flutter Engine(使用Google Skia)实现的,上次我看到的是用 C++ 构建的。但是,对本机平台的接口调用是通过其特定的 SDK(以及本机语言,例如 Swift 和 Kotlin/Java)完成的。
Dart既是一种编程语言,也是一种平台(Dart VM)。它可以以多种方式运行:
- Dart 虚拟机:在 Windows、macOS 和 Linux 上,使用 Just-in-Time。
- Native:使用dart2native,可以将 Dart 编译为独立的、单个文件的本机可执行文件。
- JavaScript:使用源到源编译器,Dart 代码转换为 JavaScript,并且可以在大多数 Web 浏览器中运行。
- AOT / Ahead-of-Time:这是完全原生于移动平台(iOS / Android),主要用于交付到应用商店。
在引擎盖下,有很多坚实的魔法正在发生。它可能包括将一些特定于 GUI 的相关代码转换为原生代码。享受!
推荐阅读
- java - @SerializedName 被忽略
- azure - 在 Azure 资源管理模板中创建 StorageV2 存储帐户
- react-native - 反应原生状态栏
- ios - 当此消息出现时 - 应用程序正在积极使用您的位置,UI 更改
- jestjs - 与 Babel 开玩笑 ^7.0.0-beta.51 问题
- php - 删除表后如何重新迁移laravel迁移
- linux - 将标记的数据包预路由到 docker 容器内的环回接口
- postgresql - “INSERT INTO ... FETCH ALL FROM ...”无法编译
- stripe-payments - Stripe - 一次性卡和延迟收费
- c# - (Web API Post 方法)异常处理