Skip to content
目录

Codegen 与 Autolinking 机制

1. 为什么 RN 必须重度依赖 Codegen

RN 是多语言系统(JS/TS + Kotlin/Java + ObjC/Swift + C++)。
没有 codegen,就需要手写:

  • 模块接口桥接
  • 平台注册代码
  • 组件描述与类型映射

这在生态规模上不可维护,且容易出现平台语义漂移。

2. Codegen 主流程(源码)

入口链路:

  • scripts/generate-codegen-artifacts.js
  • scripts/codegen/generate-artifacts-executor/index.js
  • .../generateNativeCode.js
  • Android 插件任务 GenerateCodegenSchemaTask / GenerateCodegenArtifactsTask

关键流程:

  1. 扫描应用与依赖中的 codegenConfig
  2. 生成 schema 与 native artifacts
  3. 区分平台输出目录(android / ios)
  4. 根据 includesGeneratedCode 决定是否跳过再生成

3. Autolinking 主流程(源码)

Settings 插件:

  • settings-plugin/.../ReactSettingsExtension.kt

任务逻辑:

  • 运行 npx @react-native-community/cli config 生成 autolinking.json
  • 使用 lockfile + SHA 缓存,避免每次全量扫描
  • 读取 model 自动 include Android 子项目

New Architecture C++ 接线:

  • GenerateAutolinkingNewArchitecturesFileTask.kt
  • 输出 Android-autolinking.cmake + autolinking.cpp/h

4. 设计原因与收益

  • 单一真相源:package.json 的 codegenConfig + CLI config
  • 自动化注册:减少模板代码、降低升级成本
  • 增量缓存:加速本地与 CI
  • 生态友好:库作者只需声明配置,不必深度入侵 app 构建文件

5. 可落地回答

“RN 的 codegen + autolinking 本质是把‘手工跨语言 glue code’产品化。你声明配置,工具生成 schema、Java/C++/ObjC 产物并接入构建图;它同时用 lockfile hash 做缓存,控制工程成本和增量效率。”

MIT License.