FIDL
FIDL 目标 生成隐式 Dart 绑定目标。要使用为下列对象生成的绑定:
//foo/bar
//foo/bar:blah
请在 BUILD.gn 中添加依赖:
deps = [
...
"//foo/bar",
"//foo/bar:blah",
...
]
FIDL 为 dart 生成了 3 个文件。您可以在 out/default/dartlang/gen/<path-to-target>/<fidl-servicename>_package/lib
找到。
- fidl.dart - 同步绑定
- fidl_async.dart - 异步绑定
- fidl_test.dart - 被剔除的服务实现。
import "package:fidl_foo_bar/fidl.dart";
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。
import 'package:fuchsia_services/services.dart';
为了使用 Launcher 服务启动实现 FIDL 接口的服务,您需要在 .cmx 文件中声明 fuchsia.sys.Launcher
服务。