用途:用 package:ffigen(FfiGenerator)自动、标准化地生成 Dart FFI 绑定,替代易错且脆弱的手写绑定。当存在原生头文件(.h)或由构建步骤生成时,不应手写 DynamicLibrary.lookup、@Native external 函数或原始结构体类。
主要能力与约束:生成脚本应位于目标包根目录的 tool/ffigen.dart;第三方头文件放在 third_party/(或包根 src/),否则应提示用户移动到标准位置。避免导入整个原生库,使用 Functions.includeSet 或 include 闭包做精确正向匹配。若绑定第三方库,生成文件必须放在 lib/src/third_party/,主绑定文件必须用 .g.dart 扩展名。Output 的 preamble 需包含与原生库一致的许可证、目标头文件版权声明及自动生成警告。集成到运行时或通过 native hooks 编译原生资产时,在 Functions 下设置 recordUse: (_) => true,并在 Output 指定 recordUseMapping(须为 lib/src/third_party/ 下的 .g.dart)。
使用方式:在 pubspec.yaml 的 dev_dependencies 添加 ffigen(如 dart pub add dev:ffigen);用 Platform.script 动态解析路径;编写 tool/ffigen.dart 调用 FfiGenerator(...).generate();运行 dart run tool/ffigen.dart;再运行 dart analyze 验证。生成文件由 ffigen 自动格式化(format: true)。
限制:若 dart analyze 在生成文件中报告风格或 lint 警告,应在生成脚本 preamble 的 ignore_for_file 中追加对应警告码,不要修改包全局规则;若报告真正的编译或分析错误,不要手动编辑生成文件,应把错误详情报告给用户并指向 github.com/dart-lang/native 提交 issue。完成前应运行生成器并检查生成文件是否变化,避免提交过期的绑定。