跳转到内容

生成产物

默认输出到 native/generated/(由 dart_cpp_bridge.yamlcpp_wire_output 配置):

native/generated/
├── wire_dispatch.hpp # 分发函数声明
├── wire_dispatch.cpp # 分发实现(帧解码、方法路由、编码响应)
└── ir.json # 中间表示(调试用)

生成的分发代码处理:

  • 帧解码(ByteReader
  • 方法路由(switch (method_id)
  • 参数反序列化
  • 调用业务函数
  • 返回值序列化
  • 错误捕获和编码

默认输出到 lib/src/native_gen/(由 dart_cpp_bridge.yamldart_output 配置):

lib/src/native_gen/
├── api/
│ ├── init.dart # 初始化 / dispose / BridgeApi 单例
│ ├── bridge_api.dart # 对应 native/api/bridge_api.h
│ ├── counter.dart # 对应 native/api/counter.h
│ ├── foreign_api.dart # 对应 native/api/foreign_api.h
│ └── multi_runtime_api.dart # 对应 native/api/multi_runtime_api.h
├── dcb_bindings.dart # FFI 原生符号绑定
└── dcb_generated.dart # 方法 ID、通用编解码、内部实现

即:native/api/{name}.h 会生成 lib/src/native_gen/api/{name}.dart

推荐通过包根目录的导出文件使用:

import 'package:codegen_demo/codegen_demo.dart';

lib/codegen_demo.dart 会把 api/ 下的文件统一 export 出来。

每个 API 头文件生成的 Dart 文件内部仍保持三层:

位置 用途
顶层函数 api/{name}.dart initBridge(), add(), …
单例 api/init.dart BridgeApi.instance
实现 dcb_generated.dart 方法 ID、编解码逻辑
import 'package:my_app/codegen_demo.dart';
void main() async {
await initBridge();
final result = await add(1, 2);
print(result); // 3
disposeBridge();
}

业务实现保持在用户编写的文件中:

native/api_impl/bridge_api.cpp # 用户手写实现

代码生成器不会修改这些文件。