FIDL

FIDL 目标 生成隐式 Dart 绑定目标。要使用为下列对象生成的绑定:

  1. //foo/bar
  2. //foo/bar:blah

请在 BUILD.gn 中添加依赖:

  1. deps = [
  2. ...
  3. "//foo/bar",
  4. "//foo/bar:blah",
  5. ...
  6. ]

FIDL 为 dart 生成了 3 个文件。您可以在 out/default/dartlang/gen/<path-to-target>/<fidl-servicename>_package/lib 找到。

  • fidl.dart - 同步绑定
  • fidl_async.dart - 异步绑定
  • fidl_test.dart - 被剔除的服务实现。
  1. import "package:fidl_foo_bar/fidl.dart";
  2. import "package:fidl_foo_bar_blah/fidl_async.dart";

已知的问题

在一个 BUILD 文件里编写多个 FIDL 目标

如果两个 FIDL 目标共存于一个 BUILD 文件中:

  • 它们各自生成的文件当前将放置在输出目录的同一子目录中。 这意味着属于一个目标的文件将可供另一目标的客户端使用,这可能会混淆分析器。 现在这不应该是一个构建问题,但如果客户端没有正确设置它们的依赖关系,一旦生成的 Dart 文件被放置在单独的目录中,就会成为一个问题。
  • 对于 Dart 包使用的 另一 FIDL 目标中的这些目标之一的依赖,会导致“无法读取 Dart 源……”错误。 FIDL 的绑定生成器基于含有被包含 FIDL 文件的目录结构来构建 Dart 包名称,而 GN(用于计算 Dart 包的依赖关系)使用完整的 GN 目标名称来实现。 例如:对 lib/foo/fidl:bar 的依赖会生成一个形如 lib.foo.fidl._bar 的包。 对顶层目标 lib/foo/fidl 的依赖会生成包 lib.foo.fidl,这与 Dart FIDL 绑定的假设相符。

调用 FIDL 服务

Dart 生成的绑定需要导入 fuchsia_services。

  1. import 'package:fuchsia_services/services.dart';

为了使用 Launcher 服务启动实现 FIDL 接口的服务,您需要在 .cmx 文件中声明 fuchsia.sys.Launcher 服务。