为什么 Flutter 将标准库的 src 复制到 sky_engine



由于 dart:ffi 可以从 Dart 2.2.0-dev.2.0 获得,我一直在尝试使用该库。示例应用程序对我来说效果很好,我也尝试将其用于我的 Flutter 应用程序,但我无法用 import "dart:ffi" 调用它,尽管我的机器上的 Flutter 是使用 Dart 2.3.0-dev.0.0master HEAD

检查了发生了什么,然后我发现sky_engine不包含ffi.dart,而它包含其他库(例如"dart:core"(。我还注意到这些库的源文件是使用 BUILD.gn 或 _embedder.yaml 从$FLUTTER_ROOT/bin/cache/dart-sdk/lib复制到$FLUTTER_ROOT/bin/cache/pkg/sky_engine的,这似乎是我无法在我的 Flutter 应用程序中使用该dart:ffi的原因。

然而,首先,为什么 Flutter 需要 sky_engine,即"Dart 和 Flutter Engine 之间的接口"?为什么不直接调用它们而没有这个胶水代码呢?

Flutter 为 FFI 提供了很好的文档,能够调用本机 C API。在 Flutter 应用程序上添加import 'dart:ffi' as ffi;在我使用 Flutter 2.5 进行测试时没有问题。如果您能够提供问题的最小重现,这将有助于人们更好地理解问题。

至于为什么 Flutter 使用 sky_engine 的问题,那只是因为它是"flutter_engine"——类似于评论中已经提到的。

相关内容

最新更新