Skip to content
目录

多平台编译与兼容机制(Android / iOS / C++ / JS)

1. Android:Gradle Plugin 统一编排

核心文件:

  • packages/gradle-plugin/.../ReactPlugin.kt
  • .../TaskConfiguration.kt
  • .../tasks/BundleHermesCTask.kt
  • .../tasks/GenerateAutolinkingNewArchitecturesFileTask.kt

关键机制:

  • 插件统一注入依赖、仓库、NDK、BuildConfig、代码生成任务
  • 按 variant 生成 JS bundle / assets / sourcemap
  • 非 debug variant 执行 Hermes bundle 编译任务
  • preBuild 绑定 codegen 与 autolinking 任务,确保 native 编译前产物齐备

兼容点:

  • windowsAwareCommandLine 处理跨平台命令执行差异
  • Hermes 按 variant 可控,且支持 engine packaging 选项

关键代码(节选):

kotlin
if (!isDebuggableVariant) {
  val bundleTask =
      tasks.register("createBundle${targetName}JsAndAssets", BundleHermesCTask::class.java) { task ->
        task.hermesEnabled.set(isHermesEnabledInThisVariant)
        task.minifyEnabled.set(!isHermesEnabledInThisVariant)
      }
}

2. iOS:CocoaPods + 脚本化装配(并逐步走向替代方案)

核心文件:

  • packages/react-native/scripts/react_native_pods.rb
  • scripts/cocoapods/new_architecture.rb
  • scripts/cocoapods/jsengine.rb
  • scripts/react-native-xcode.sh

关键机制:

  • use_react_native! 汇总安装 Core/Fabric/Turbo/Runtime pods
  • 默认 Hermes,JSC 迁移至社区包(third-party)
  • post_install 注入 C++ 标准、编译 flags、路径与隐私清单聚合
  • Xcode 构建阶段脚本统一负责 bundle + assets + Hermes bytecode + sourcemap 合成

兼容点:

  • Debug/Release、Simulator/Device 的 bundling 行为分支
  • BUNDLE_PLATFORM 处理 iOS / macOS / catalyst 目标差异

关键脚本(节选):

bash
case "$PLATFORM_NAME" in
  "macosx")
    BUNDLE_PLATFORM="macos"
    ;;
  *)
    BUNDLE_PLATFORM="ios"
    ;;
esac

3. C++ 层:跨端共享与自动接线

通过 autolinking 任务生成:

  • Android-autolinking.cmake
  • autolinking.cpp
  • autolinking.h

它把三方库 TurboModule / C++ module / ComponentDescriptor 自动接入 Native 编译图,减少手工 CMake 与注册代码。

4. 预编译产物与二进制兼容(iOS)

scripts/ios-prebuild/__docs__/README.md 显示:

  • RN 支持构建 XCFramework(iOS / simulator / catalyst)
  • 使用 BUILD_LIBRARY_FOR_DISTRIBUTION=YES 保证模块稳定性
  • 用 VFS Overlay 映射头文件路径,解决预编译框架 header 结构兼容问题

这是典型“工程兼容优先”的方案:通过编译器层虚拟文件系统补齐历史头文件布局。

5. 可讲的“兼容策略三板斧”

  • 任务前置:codegen/autolinking/preBuild 强绑定,避免运行时缺依赖
  • 编译抽象:Gradle/CocoaPods 封装引擎、架构、产物路径差异
  • 产物中立:源码构建与预编译二进制双路径并存(含 VFS/符号处理)

MIT License.