常见问题解答

编辑

关于 Expo 及相关服务的常见问题和限制列表。


此页面列出了一些有关 Expo 及相关服务的常见问题和答复。如果您有未在此处回答的问题,请参阅 论坛 以获取更多常见问题。

Expo 用于什么?

Expo 是一个 开源框架,用于在 Android、iOS 和 Web 上本地运行的应用。Expo 将移动和 Web 的最佳结合在一起,并为构建和扩展应用提供许多重要功能,例如实时更新、即时共享您的应用和 Web 支持。expo npm 包为 React Native 应用启用了一套令人惊叹的功能。expo 包几乎可以安装在任何 React Native 项目中。有关更多信息,请参阅 Expo 提供的内容

公司使用 Expo 吗?

是的,Expo 被全世界的顶级公司使用,服务数亿终端用户。请查看我们的展示

为什么 Expo 有自己的 SDK?

当 Expo 首次创建时,React Native 尚未公开发布。这意味着没有第三方包。为了使 React Native 的开发体验合理,我们创建了几个库以实现常见功能。这些库许多已经被分叉和修改以满足各种需求。我们欢迎用户根据需要混合和匹配任何 自定义原生代码,以使他们的应用变得出色。

Expo SDK 经过充分测试,使用 TypeScript 编写,具有文档记录,并为 Android、iOS 和 Web 构建。Expo SDK 中的每个模块都协同工作,以确保版本始终匹配。这创造了良好的升级体验。

Expo SDK 还使用 Expo Modules API 编写,以使贡献、维护和理解更容易。

Expo 和 React Native 之间有什么区别?

expo 包提供了一套简化复杂 React Native 应用开发和扩展的功能。您可以在几乎所有的 React Native 应用中安装 expo。不过,使用 Expo 应用服务 (EAS) 或 React Native 并不需要 expo 包,但我们强烈推荐使用。有关更多信息,请参阅 Expo 提供的内容

我需要从 React Native 切换到 Expo 吗?

不,expo npm 包和 CLI 适用于任何 React Native 应用。Expo 应用服务 (EAS) 也适用于所有 React Native 应用,提供构建、更新、应用商店提交等一流支持。

Expo 的费用是多少?

Expo 平台是 免费且开源的。这包括构成 Expo SDK 的库和用于开发的 Expo CLI。Expo Go 应用是开始的最简单方法,也可以在应用商店免费获得。

Expo 应用服务 (EAS) 是 Expo 团队为 React Native 应用提供的一套可选云服务。EAS 使构建应用、提交到应用商店、保持更新、发送推送通知等变得更容易。如果 免费计划 的配额足够满足您的应用需求,则可以免费使用 EAS。更多信息请查看 定价页面

如何将自定义原生代码添加到我的 Expo 项目?

Expo 支持添加自定义原生代码并自定义该代码(Android/Xcode 项目)。要使用任何自定义原生代码,您可以创建一个 开发构建配置插件。我们确实推荐在可能的情况下使用 Expo SDK 中的模块,以便更轻松地进行升级并改善开发者体验。

我可以在使用 React Native CLI 创建的应用中使用 Expo 吗?

可以!所有 Expo 工具和服务都可以在任何 React Native 应用中很好地工作。例如,您可以使用 Expo SDK 的任何部分、expo-dev-client 和 EAS 构建、提交和更新——它们工作得很好!了解更多关于 在您的项目中安装 expo采用预构建设置 EAS 构建 的信息。

我如何分享我的 Expo 项目?我可以将其提交到应用商店吗?

分享您项目的最快方法是通过 EAS 更新 发布,并在 开发构建 中启动。这会为您的应用提供一个 URL;您可以与任何拥有 Android 或 iOS 的 开发构建 的人共享该 URL。URL 也可以在 Android 的 Expo Go 中打开。

准备好后,您可以创建一个生产构建 (.aab.ipa) 以提交到应用商店。您可以通过 EAS 构建 使用单个命令构建应用,并通过 EAS 提交 将其提交到商店。

您还可以使用 内部分发 通过 APK 在 Android 上共享应用,并在 iOS 上使用 Ad-hoc 或企业配置。

我可以在 Windows 电脑上开发 iOS 应用吗?

传统上,您需要 macOS 才能开发 iOS 应用,但是,您可以使用 EAS 构建 在云中构建应用。您还可以使用 EAS 提交 将您的应用提交到商店。可以使用 Expo Go开发构建 在物理 iOS 设备上进行测试。

Expo SDK 支持哪些版本的 Android 和 iOS?

目前,Expo SDK 支持 Android 7+ 和 iOS 15.1+。欲了解更多信息,请参见 对 Android 和 iOS 版本的支持

“hello world” expo 应用的最小大小是多少?

使用纯 Expo 创建的最低生产应用小于 3 MB。对于 iOS,Expo 目标是较新最低 iOS 版本,以便能够进行应用商店优化。

如果您的应用中包含 expo 包,它在应用商店的最终应用大小中只一次增加 1 MB。expo 包的大小开销很小(例如,Android 上为 150 Kib)。其余大小来自语言运行时(如 Android 上的 Kotlin)。

我可以将 Expo 与我的原生库一起使用吗?

您可以通过使用 Swift 和 Kotlin 创建 自定义原生模块 来将原生 Android 和 iOS 库与 Expo 一起使用。许多流行的库已经具有自定义原生模块。查看我们的 React Native 目录,以查找适合您用例的流行库。

我可以将 Expo 与这个 Web 库一起使用吗?

许多流行的 Web 包,如 three.js,可以与 Expo 和 React Native 一起使用。有关更多信息,请参见 Expo 示例

Expo 是否类似于用于 Web 开发的 React?

Expo 是一个 开源框架,用于在 Android、iOS 和 Web 上本地运行的应用。React Native 类似于 Web 开发中的 react-dom,使您能够在特定平台上运行 React,然而,它有一些关键的区别:

  • React Native 不支持 HTML 或 CSS。
  • React Native 使用原生组件,而不是使用 DOM。例如,使用 <View /> 代替 <div />。原生组件比 DOM 更高效,并提供更佳的用户体验。
  • 与访问浏览器 API 的 React.js 不同,React Native 使用自定义原生 API。例如,使用 expo-location 代替 navigator.geolocation 访问用户位置。自定义原生 API 类似于浏览器 API,但您可以对其进行完全控制。这意味着您可以在这些功能在浏览器中可用之前访问新特性。

与 React.js 框架帮助用户轻松创建更大的网站类似,Expo 帮助用户轻松创建更大的应用。Expo 提供了一套经过充分测试的 React Native 模块,能够在 Android、iOS 和 Web 上运行。Expo 还提供了一套工具 工具 用于构建、部署和更新您的应用。

关于解释性代码的商店政策是什么?

React Native 使用 JavaScript 解释器(JSC、V8 或 Hermes)来运行您的应用程序代码。请直接参阅 Google Play 政策中心Apple 开发者计划许可证协议 以获取最新政策信息。

以下是截至 2024 年 4 月 25 日的相关政策摘录。

Google Play 商店

...应用可能无法从 Google Play 以外的来源下载可执行代码(例如 dex、JAR、.so 文件)。此限制不适用于在虚拟机或解释器中运行的代码,这两者都提供间接访问 Android API 的权限(例如,Webview 或浏览器中的 JavaScript)。 应用或第三方代码(如 SDK),使用解释性语言(JavaScript、Python、Lua 等)在运行时加载(例如,未与应用打包)必须不允许对 Google Play 政策的潜在违反。

来源: Google Play 政策中心.

Apple 应用商店

...解释性代码可以下载到应用程序中,但前提是该代码: (a) 不通过提供与应用程序作为提交到应用商店的意图和广告目的不一致的特性或功能改变应用程序的主要目的, (b) 不为其他代码或应用程序创建商店或销售点,以及 (c) 不绕过操作系统的签名、沙盒或其他安全功能。

来源: 3.3.1 APIs 和功能 - B. 可执行代码.

我应该使用 Expo CLI 还是 React Native Community CLI?

Expo CLI 提供与 React Native Community CLI(也称为 “React Native CLI”)相同的核心功能,并具有额外的功能,例如自动 TypeScript 设置Web 支持自动安装兼容库改进的原生构建命令隧道功能预构建 等。

它可以与 React Native Community 同时使用。无论您使用哪个 CLI,您都可以在项目中使用 Expo SDKExpo 应用服务 的任何部分。有关更多信息,请查看:

注意: EAS Build 与现有的 React Native 项目兼容(原生目录已检查到版本控制中)。当这些目录存在时,EAS Build 不会运行预构建步骤,因为这可能会覆盖您对原生项目文件所做的任何手动自定义。您需要使用 Android Studio 或 Xcode 等原生工具自行配置原生目录。

Expo Go 是开源的吗?

是的,Expo Go 的源代码可以在 expo/expo GitHub 仓库apps/expo-go 目录中找到。Expo Go 应用也是使用 Expo 和 React Native 构建的。

我可以用 Expo Go 做什么或不能做什么?

Expo Go 是一个沙盒,可以帮助您快速开始 React Native 开发,以便学习、原型设计或实验。它允许您使用包含在 Expo SDK 中的库和不需要自定义原生代码的库。

Expo Go 不能使用需要自定义原生代码的第三方库,您也无法在 Expo Go 中直接编辑原生代码。它不能用于生产应用。

我们强烈建议任何需要具有原生代码的附加库的项目迁移到 开发构建。这就像创建一个特别定制为您应用需求的 Expo Go 版本。

弹出是否被弃用?

是的,弹出是一个被弃用的术语,不再是必需的。当 Expo 首次发布时,应用的原生二进制文件大小较大,并且不支持自定义原生代码而不“弹出”。这一点在 2020 年 12 月随着 EAS Build 的发布而改变,EAS Build 支持任何 React Native 应用。“弹出”的概念在 SDK 41(2021 年 4 月)中被 npx expo prebuild 命令取代,该命令根据项目和应用配置(app.json)中的库不断生成原生项目。expo eject 命令在 SDK 46(2022 年 8 月)中完全被弃用。

与之前的弹出工作流程不同,作者可以通过创建 配置插件 将其库配置为与 Expo Prebuild 兼容。这意味着您可以使用任何库与 Expo Prebuild。您还可以通过创建 开发构建 使用任何自定义原生代码与 Expo Prebuild。了解更多信息,请参阅 Expo Prebuild 文档