Expo 模块 API:概述

编辑

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


什么是 Expo 模块 API

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

我们相信,使用 Expo 模块 API 使构建和维护几乎所有类型的 React Native 模块变得尽可能简单,我们认为 Expo 模块 API 是绝大多数开发人员为其应用构建原生模块的最佳选择。

常见问题

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

大多数情况下,Expo 和 React Native 开发人员不需要编写任何原生代码 — 库已经针对广泛的用例提供了支持,从相机到视频、到地图、到触觉等应有尽有。

但有时,没有任何东西能够完全满足您的需求。也许您想集成您公司所要求的分析服务,但该服务尚未拥有 React Native 库,因此您需要围绕他们的 SDK 构建一个模块。或者,也许您想访问您的应用所需,但并不常用的系统特性,因此没有人维护相应的库。

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

总结并改述 React Native 团队的建议:

  • 如果您打算在原生模块中使用 C++,请使用 Turbo 模块,因为它提供了更方便的低级机制访问。
  • 如果您希望更好的开发体验,并且愿意在模块中依赖 expo 包,则使用 Expo 模块 API。
我在哪里可以找到开源的 Expo 模块以供学习?

如果您想学习我们如何实现库,Expo SDK 是一个很好的地方。另一个极好的资源是开源应用,例如 Bluesky

以下库是我们社区中的一些最爱:

使用 Expo 模块 API 会对我的应用大小产生什么影响?

将 Expo 模块 API 添加到您的应用对应用大小的影响微乎其微,可能会增加几百千字节的大小。在这篇博客文章中了解更多

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

Expo 模块 API 的性能特性与 React Native 的 Turbo 模块 API 类似。两个 API 都利用 React Native 的 JavaScript 接口(JSI),而不是使用过时的 JSON 消息队列(“桥”)的方法 (了解更多关于 JSI 的内容)。

无论是 Expo 模块还是 Turbo 模块,并不是为了追求技术上最快的速度,而是在重要的地方提供快速。例如,Expo 模块 API 可能会利用代码生成和新的原生 Swift / C++ 互操作性,来减少单个方法调用的开销。然而,这会带来一些开发体验挑战和开销,我们尚未遇到任何这样的优化能提供实质性现实世界性能改进的用例。实际上,执行原生方法主体所花费的时间往往比方法调用的开销大几个数量级。Expo 模块和 Turbo 模块可以轻松地每秒执行数十万次原生方法调用,这远远超过您可能在任何应用中发现的,并且方法调用的开销不太可能成为瓶颈。

如果您在使用 Expo 模块 API 时遇到任何性能瓶颈,提交问题,我们很乐意与您讨论。

Expo 模块 API 是否支持 Android、iOS 和 Web 以外的平台?

Expo 模块 API 对 macOS 和 tvOS 有实验性支持。有关更多信息,请参见 额外平台支持 教程。

我如何使用 Expo 模块 API 将第三方 SDK 提供给我的 Expo 应用?

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

下一步

教程:创建原生模块

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

教程:创建原生视图

关于使用 Expo 模块 API 创建一个渲染 WebView 的原生视图的教程。

Expo 模块 API:参考

关于使用 Kotlin 和 Swift 创建原生模块的参考。

Expo 模块 API:设计考虑

关于 Expo 模块 API 的设计考虑的概述。

expo-module.config.json

可用配置选项的参考。