添加自定义原生代码
编辑页面
了解如何向你的 Expo 项目添加自定义原生代码。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
你可以通过以下一种或两种方式来添加自定义原生代码:
使用包含原生代码的库
Expo 和 React Native 开发者通常会把绝大部分时间花在编写 JavaScript 代码,以及使用通过诸如 expo-camera、react-native-safe-area-context 和 react-native 本身等库提供的原生 API 和组件上。这些库允许开发者从其 JavaScript 代码中访问并使用设备功能。它们也可能提供对使用原生代码实现的第三方服务 SDK 的访问(例如 @sentry/react-native,它为 Android 和 iOS 上的 Sentry 原生 SDK 提供绑定)。
使用 Expo Go?
如果你正在使用 Expo Go,你只能访问 Expo SDK 中包含的原生库,或者不包含任何自定义原生代码的库(了解更多)。创建开发构建后,你就可以像在其他原生应用中一样更改原生代码或配置。
在开发构建中安装带有自定义原生代码的库
在使用 开发构建时,使用带有自定义原生代码的库非常简单:
- 使用 npm 安装该库,例如:
npx expo install react-native-localize - 如果该库包含 配置插件,你可以在应用配置中指定你偏好的配置。
- 创建一个新的开发构建(可以在本地或使用 EAS)。
现在你就可以在应用代码中使用这个库了。
关键概念和开发工作流
开发概览提供了使用 Expo 开发应用时的关键概念以及核心开发循环的流程说明。
编写原生代码
使用 Expo Modules API 来编写 Swift 和 Kotlin 代码,并通过原生模块和视图为你的应用添加新能力。虽然你也可以使用其他工具来构建原生模块,但我们认为使用 Expo Modules API 能让构建和维护几乎所有类型的 React Native 模块变得尽可能简单。我们认为,对于大多数为自己的应用构建原生模块的开发者来说,Expo Modules API 是最佳选择。
你是否在考虑主要用 C++ 编写一个模块?
如果你打算主要用 C++ 编写一个原生模块,你可能需要了解 React Native 提供的 Turbo Modules API。
使用 Expo Modules API
Expo 提供的用于开发原生模块的 API 和工具概览。
关于使用 Expo Modules API 创建一个持久化设置的原生模块的教程。
关于使用 Expo Modules API 创建一个渲染原生 WebView 组件的原生视图的教程。
创建本地模块
如果你打算在单个应用中使用你的原生模块(之后你随时可以改变主意),我们建议使用“本地” Expo 模块来编写自定义原生代码。本地 Expo 模块的功能与库开发者以及 Expo SDK 内部使用的 Expo Modules 类似,例如 expo-camera,但它们不会发布到 npm。相反,你会直接在项目中创建它们。
创建本地模块会在项目的 modules 目录中生成一个 Swift 和 Kotlin 模块,并且这些模块会自动链接到你的应用。
- npx create-expo-module@latest --local- npx expo run与多个应用共享模块
如果你打算在多个应用中使用你的原生模块,那么请使用 npx create-expo-module@latest, 去掉 --local 标志,并创建一个独立模块。你可以将你的包发布到 npm,或者把它放到 monorepo 中的 packages 目录里(如果你有的话),以类似本地模块的方式使用它。
使用连续原生生成(CNG)时的注意事项
以下建议在使用 CNG 时最为重要,但即使你不使用它们,也同样是很好的指导原则。
在本地构建,以获得最佳调试体验和快速反馈
默认情况下,使用 create-expo-app 创建的 Expo 项目会使用 CNG,并且在你于项目中运行 npx expo prebuild 命令之前,不会包含 android 或 ios 原生目录。在使用 CNG 时,开发者通常不会将 android 和 ios 目录提交到源代码管理,也不会在本地生成它们,因为 EAS Build 会在构建过程中自动完成这些工作。尽管如此,在编写自定义原生代码时,通常会生成原生目录并使用 npx expo run 在本地构建,这样可以获得快速的反馈循环,并在 Android Studio / Xcode 中完整访问原生日志和调试工具。
使用配置插件进行原生项目配置
如果你的原生代码需要你更改项目配置,例如修改项目的 AndroidManifest.xml 或 Info.plist,你应该通过配置插件来应用这些更改,而不是直接修改 android 和 ios 目录中的文件。请记住,当你使用 CNG 时,直接对原生项目目录所做的更改会在下次运行 prebuild 时丢失。