开始使用 EAS Update
编辑页面
了解如何开始进行在项目中配置和使用 EAS Update 所需的设置。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
设置 EAS Update 可让您立即向用户推送他们需要的重要错误修复和改进。本指南将带您完成在新项目或现有项目中设置 EAS Update 的过程。
如果您计划将 EAS Update 与 EAS Build 一起使用,我们建议您在继续此处之前先阅读 EAS Build 设置指南。不过,您也可以在不使用任何其他 EAS 服务的情况下使用 EAS Update。
前置条件
Expo 用户账户
EAS Update 对任何拥有 Expo 账户的人都可用,无论您是否付费使用 EAS 或使用免费计划。您可以在 expo.dev/signup 注册。
付费订阅者可以向更多用户发布更新,并使用更多带宽和存储空间。了解更多不同计划及其权益,请访问 EAS 定价。
一个 React Native 项目
还没有项目?没问题。创建一个可供本指南使用的 “Hello world” 应用非常快速且简单。
运行以下命令创建新项目:
- npx create-expo-app@latest my-app --template default@sdk-55EAS Update 也适用于使用 npx create-react-native-app、npx react-native、ignite-cli 以及其他项目脚手架工具创建的项目。
您的项目必须使用 Expo CLI 并扩展 Expo Metro Config
如果您已经使用 npx expo [command] 运行项目(例如,您是通过 npx create-expo-app 创建的),那么一切就绪。
如果您的项目中还没有 expo 包,请运行下面的命令进行安装,并 选择使用 Expo CLI 和 Metro Config:
- npx install-expo-modules@latest如果命令失败,请参考 安装 Expo 模块 指南。
您的项目必须使用 registerRootComponent 函数,而不是 registerComponent
如果您是通过 npx create-expo-app 创建项目的,或者您在应用中根本没有调用 registerRootComponent(例如,由 Expo Router 处理),那么一切就绪。以下内容适用于使用其他工具创建的项目,例如 React Native Community CLI。
我们建议使用 EAS Update 的应用采用 Expo 的 registerRootComponent 而不是 React Native 的 registerApplication。这将确保 Expo 能够配置 React Native 加载资源,例如更新中包含的图片。如果您不使用 registerRootComponent,您可能会发现发布构建中无法使用这些资源。
在使用 React Native Community CLI 创建的简单应用中,差异如下:
| 1 | import {AppRegistry} from 'react-native'; | |
| 2 | import {name as appName} from './app.json'; | |
| 1 | import {registerRootComponent} from 'expo'; | |
| 3 | 2 | import App from './App'; |
| 4 | ||
| 5 | AppRegistry.registerComponent(appName, () => App); | |
| 3 | export default registerRootComponent(App); |
完成该更改后,请将您的 MainActivity 和 AppDelegate 更新为使用模块名 "main",而不是您的应用名称。
1
2
3
配置您的项目
在终端中进入您的项目目录并运行以下命令:
# 使用 EAS Update 初始化您的项目- eas update:configure这个命令会做什么?
eas update:configure 命令会使用 runtimeVersion 和 updates.url 属性更新您的 app.json 文件,并在您的项目之前未使用任何 EAS 服务时添加 extra.eas.projectId 字段。
当您在不使用 CNG 的项目中运行 eas update:configure 时,您会在原生项目中看到以下更改:
Android
在 android/app/src/main/AndroidManifest.xml 文件中,您会看到以下新增内容:
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://u.expo.dev/your-project-id"/> <meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>
EXPO_UPDATE_URL 的值应包含您的项目 ID。
在 android/app/src/main/res/values/strings.xml 中,您会在 resources 对象里看到 expo_runtime_version 字符串条目:
iOS
在 ios/project-name/Supporting/Expo.plist 中,您会看到以下新增内容:
<key>EXUpdatesRuntimeVersion</key> <string>1.0.0</string> <key>EXUpdatesURL</key> <string>https://u.expo.dev/your-project-id</string>
EXUpdatesURL 的值应包含您的项目 ID。
如果您使用 Xcode 创建项目构建,请确保 已将Expo.plist文件添加到您的 Xcode 项目中。
4
配置更新频道
构建中的 channel 属性可让您将更新指向特定类型的构建。例如,它允许您向预览构建发布更新,而不影响生产环境部署。
如果您正在使用 EAS Build,eas update:configure 会在 eas.json 中为 preview 和 production 配置文件设置更新的 channel 属性。如果您使用不同的配置文件名称,请手动设置它们。
eas.json 中的频道配置示例
{ "build": { "preview": { "channel": "preview" // ... }, "production": { "channel": "production" // ... } } }
如果您没有使用 EAS Build,则需要在 app.json 或原生项目中配置 channel,具体取决于您是否使用 CNG。当您为不同环境创建构建时,需要修改 channel,以确保构建从正确的 channel 拉取更新。更多信息请参阅 将 EAS Update 作为独立服务使用。
在 app.json 中配置更新频道
如果您使用 Continuous Native Generation(CNG),则可以在 app.json 中使用 updates.requestHeaders 属性配置 channel:
{ "expo": { %%placeholder-start%%... %%placeholder-end%% "updates": { %%placeholder-start%%... %%placeholder-end%% "requestHeaders": { "expo-channel-name": "your-channel-name" } %%placeholder-start%%... %%placeholder-end%% } %%placeholder-start%%... %%placeholder-end%% } }
该配置将在您下次运行 npx expo prebuild 时生效。
在 Android 原生项目中配置更新频道
在 AndroidManifest.xml 中,您需要添加并将 your-channel-name 替换为与您的项目匹配的频道:
<meta-data android:name="expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY" android:value="{"expo-channel-name":"your-channel-name"}"/>
在 iOS 原生项目中配置更新频道
在 Expo.plist 中,您需要添加以下内容,并将 your-channel-name 替换为与您的项目匹配的频道:
<key>EXUpdatesRequestHeaders</key> <dict> <key>expo-channel-name</key> <string>your-channel-name</string> </dict>
如果您使用 Xcode 创建项目构建,请确保 已将Expo.plist文件添加到您的 Xcode 项目中。
5
7
发布更新
发布更新可以实现:
- 修复 bug 并快速更新项目的非原生部分,而无需创建新构建
- 使用内部分发 分享应用的预览版本
要发布包含项目更改的更新,请使用 eas update 命令,并指定 channel 名称、用于描述更新的 message,以及用于指定要使用哪个 EAS 环境变量 的 --environment 标志(SDK 55 及更高版本中必需):
- eas update --channel [channel-name] --message "[message]" --environment [environment-name]更新发布是如何工作的?
当您使用 eas update 命令发布更新时,它会生成一个新的更新 bundle 并将其上传到 EAS 服务器。channel 名称用于定位正确的分支,以便从其他更新分支发布新更新。它类似于 Git 提交的工作方式,即每个提交都位于某个 Git 分支上。
例如,当应用设置为从 preview channel 拉取更新时,您可以使用 eas update --channel preview 为该构建发布更新。这将会在 preview channel 上创建一个分支(默认也称为 preview)。在后台,该命令会运行 npx expo export 以生成 dist 目录并创建本地更新 bundle。此更新 bundle 会上传到 EAS Update 服务器。
深入了解 EAS Update 的工作原理。
8
测试更新
更新上传到 EAS Update 后,您可以使用以下方法之一来测试更新:
- 在 开发构建 中使用 Extensions 标签页加载更新。
- 使用 Expo Orbit 在开发构建中安装并启动更新。
- 结合 Updates API 和 app config 实现自定义策略,以编程方式在应用中加载更新。
- 通过强制关闭并重新打开应用的发布构建最多两次,手动测试更新,以便下载并应用更新。非开发构建(预览或生产)的更新会在应用启动并请求任何新更新时自动在后台下载到设备。更新会在下载完成且应用重新启动后应用。
有些地方没有正常工作?
如果您的应用没有按预期更新,请查看 调试指南,了解用于验证配置的技巧。
下一步
了解如何通过共享更新用于 QA 和测试来快速迭代。
了解在使用 EAS Update 时适用于你的项目的不同部署模式。