将 Expo 工具集成到现有原生应用中

编辑页面

关于如何将 Expo 工具集成到现有原生应用(“brownfield” 应用)中的概述。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

使用另一种技术构建的现有原生应用,其主入口点 不是 React Native 视图,通常被称为“brownfield”应用。例如,如果你的应用是使用 UIKit 和 Swift 构建的,并且你想仅对一个屏幕使用 React Native,那么这就被视为“现有原生应用”和“brownfield”。

相比之下,“greenfield”应用是从一开始就使用 Expo 或 React Native 创建的,或者 React Native 本身就是入口点,而所有其他 UI 都从这里分支出去。

按照这些定义,如果你有一个面向 Android 或 iOS 的“现有原生应用”,并且你想了解如何在项目中使用 Expo 和 React Native(也许只是在单个屏幕,甚至单个功能中),那么本指南就是为你准备的。

与现有原生应用的兼容性

将 Expo 模块集成到现有原生项目中的支持处于 alpha 阶段。如果你遇到问题,请 在 GitHub 上创建 issue。当在现有原生应用的上下文中使用时,下方工具和服务并非所有功能都可用。

Expo 主要是为 greenfield 应用构建的,但我们正在越来越多地投入到 brownfield 场景中。并非所有 Expo 工具和服务目前都与现有原生项目兼容。此外,针对 brownfield 集成的完整文档可能尚未提供,你可能需要根据你的上下文调整其他相关文档。

工具/服务支持 brownfield?
Expo SDK - React Native 的扩展标准库
Expo Modules API - 使用符合习惯的 Swift/Kotlin API 构建原生扩展
Expo Router - 基于文件的路由和导航
Expo CLI - 用于从终端运行和开发应用的工具
Expo Dev Client - 为 Debug 构建添加应用内开发者工具
EAS Build - 专为 Expo/React Native 构建的 CI/CD 服务
EAS Submit - 将应用上传到商店的托管服务
EAS Update - 应用 JavaScript 和资源的即时更新

集成式与隔离式方案

当你将 React Native 集成到现有原生应用中时,你可以在两种主要方案之间进行选择:集成式和隔离式。最适合你的方案取决于项目结构、团队工作流程以及长期目标。

集成式方案

在集成式方案中,你的 React Native 代码位于现有原生项目内部。这使 React Native 代码与原生代码之间能够紧密耦合。

例如,你可以将现有的 Android 或 iOS 原生项目添加到 React Native 项目的一个子目录中。这对于最初使用 React Native 开始、后来又添加原生代码的项目来说是常见配置,但它也可以用于现有原生应用。如果你的原生项目不能使用标准的 androidios 子目录,你可以通过一个简单的 monorepo 设置,为 React Native 代码配置一个自定义根目录。

如果符合以下情况,请选择此方案:

  • 你需要频繁地同时迭代原生代码和 React Native 代码。
  • 你有一个同时负责原生开发和 React Native 开发的单一团队。
  • 你的项目结构允许直接添加一个 React Native 项目。

隔离式方案

在隔离式方案中,你的 React Native 代码与原生项目分开开发和维护,并且可以维护在独立仓库中,或放在一个 monorepo 中。

采用这种方案时,你会将 React Native 应用打包为一个原生库(Android 使用 AAR,iOS 使用 XCFramework)。然后,你像集成任何其他原生依赖一样,将这个库集成到你的原生应用中。

这种分离简化了原生开发者的工作流程,因为他们不需要设置 Node.js 环境,也不需要处理 React Native 的构建依赖。他们只需将应用中 React Native 部分作为一个预构建产物来使用即可。

如果符合以下情况,请选择此方案:

  • 你有独立的原生团队和 React Native 团队。
  • 你希望尽量减少为现有原生构建流程引入 React Native 所带来的影响。
  • 你更倾向于将应用中的 React Native 部分视为一个自包含模块。

下一步

隔离式方案:将 Expo 打包为原生库

将你的 React Native 代码构建为 AAR/ XCFramework 产物,并将它们集成到任何原生应用中。

集成式方案:将 Expo 直接添加到你的原生项目中

配置你现有的原生项目,直接使用 React Native 和 Expo。