将 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 开始、后来又添加原生代码的项目来说是常见配置,但它也可以用于现有原生应用。如果你的原生项目不能使用标准的 android 和 ios 子目录,你可以通过一个简单的 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 部分视为一个自包含模块。
下一步
将你的 React Native 代码构建为 AAR/ XCFramework 产物,并将它们集成到任何原生应用中。
配置你现有的原生项目,直接使用 React Native 和 Expo。