Expo Modules API:概述

编辑页面

Expo 提供用于开发原生模块的 API 和工具的概述。


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

什么是 Expo Modules API

Expo Modules API 允许你使用 Swift 和 Kotlin,通过原生模块和视图为你的应用添加新能力。该 API 旨在利用现代语言特性,尽可能在两个平台上保持一致,要求尽量少的样板代码,并提供与 React Native 的 Turbo Modules API 相当的性能特征。所有 Expo Modules 都支持新架构,并且会自动向后兼容使用旧架构的现有 React Native 应用。

我们认为,使用 Expo Modules API 可以让构建和维护几乎所有类型的 React Native 模块变得尽可能简单;而且我们认为,对于绝大多数为应用构建原生模块的开发者来说,Expo Modules API 是最佳选择。

常见问题

我需要了解 Expo Modules API 才能构建 Expo / React Native 应用吗?

在大多数情况下,Expo 和 React Native 开发者不需要编写任何原生代码 — 从相机到视频、地图、触觉反馈等,已经有可用的库覆盖了广泛的使用场景。

但有时,没有任何东西能完全满足你的需求。也许你想集成一个公司要求使用、但尚未提供 React Native 库的分析服务,因此你需要基于它们的 SDK 构建一个模块。又或者你想访问某个应用所必需、但并不常用的系统功能,所以没人维护对应的库。

我应该什么时候使用 Turbo Modules,什么时候使用 Expo Modules API?

简要总结并转述 React Native 团队的建议

  • 如果你打算在原生模块中使用 C++,请使用 Turbo Modules,因为它能更方便地访问更底层的机制。
  • 如果你追求更好的开发体验,并且愿意在模块中依赖 expo 包,那么请使用 Expo Modules API。
我可以在哪里找到开源的 Expo Modules 作为学习参考?

Expo SDK 是一个很好的起点,如果你想了解我们是如何实现这些库的。另一个很棒的资源是开源应用,例如 Bluesky

以下这些库是我们从社区中最喜欢的一些:

使用 Expo Modules API 会对我的应用体积产生什么影响?

在你的应用中添加 Expo Modules API 对应用体积的影响可以忽略不计,可能只会增加几百 KB。在这篇博客文章中了解更多

使用 Expo Modules API 会对我的应用性能产生什么影响?

Expo Modules API 的性能特征与 React Native 的 Turbo Modules API 类似。两个 API 都利用了 React Native 的 JavaScript Interface(JSI),而不是使用 JSON 消息队列(“bridge”)的旧方式(了解更多关于 JSI 的信息)。

Expo Modules 和 Turbo Modules 的设计目标都不是“尽可能快”,而是在重要的地方保持高性能。例如,Expo Modules API 可以利用代码生成以及新的 native Swift / C++ 互操作来降低单个方法调用的开销。然而,这会带来一些开发体验上的挑战和额外开销,而且我们还没有遇到任何能让这种优化在真实世界中带来有意义性能提升的使用场景。实际上,执行一个原生方法主体所花费的时间,通常比方法调用本身的开销大得多。Expo Modules 和 Turbo Modules 都可以轻松地每秒执行数十万次原生方法调用,这远远超过了你在任何应用中可能遇到的需求,而方法调用的开销也不太可能成为瓶颈。

如果你在使用 Expo Modules API 时遇到任何性能瓶颈,请 提交 issue,我们很乐意与你讨论。

Expo Modules API 是否支持 Android、iOS 和 web 之外的平台?

Expo Modules API 对 macOS 和 tvOS 提供实验性支持。更多信息请参阅 其他平台支持 教程。

我如何使用 Expo Modules API 让第三方 SDK 能够在我的 Expo 应用中使用?

请在 集成现有库 教程中了解更多。

下一步

教程:创建原生模块

一个使用 Expo Modules API 创建可持久化设置的原生模块教程。

教程:创建原生视图

一个使用 Expo Modules API 创建可渲染 WebView 的原生视图教程。

Expo Modules API:参考

一个使用 Kotlin 和 Swfit 创建原生模块的参考。

Expo Modules API:设计考量

Expo Modules API 背后设计考量的概览。

expo-module.config.json

可用配置选项的参考。