Expo SDK 53 Beta:全屏體驗與原生UI革新
Expo SDK 53 Beta 現已推出:全屏、React 19 和改進的原生 UI 功能
Expo SDK 53 测试版现已正式发布,开发者可以在稳定版本发布之前测试这一最新版本。本次测试版将持续大约两周,其中包括重大升级,如 React Native 0.79.0 和 React 19.0.0,以及众多改进和新功能,增强了 React Native 的开发体验。
新架构现在默认启用于所有项目
SDK 53 的一个重大变化是,新架构现在默认在所有项目中启用。在 SDK 52 中,这仅对新项目默认启用,而在 SDK 53 中,这一设置扩展到了现有项目。如果你还没有准备好采用新架构,你需要 明确选择退出。
如果你的应用依赖某些库,可能需要执行特定的操作:
- 对于
react-native-maps
用户,建议安装包括完整新架构支持的 1.21.0 版本 @stripe/stripe-react-native
目前尚不支持新架构,但支持功能将 即将推出
如果你遇到阻止迁移到新架构的问题,请在 expo/expo 上创建问题,并暂时选择退出直到问题解决。
Android 项目默认全屏显示
SDK 53 在新的 Android 项目中默认启用了全屏显示。此变更尤其重要,因为谷歌已经宣布 在 Android 16 中无法选择退出全屏显示,预计将在六月推出。
在 SDK 53 中,Android 上的全屏显示为:
- 在 Expo Go 应用中默认启用,并且没有选择退出的选项
- 在所有新项目中默认启用,可在 Expo Go 之外选择退出
- 在 Expo Go 之外的现有项目中默认禁用,但可以选择加入
展望 SDK 54,全屏显示将成为新项目和现有项目的默认设置。有关实现细节,请参阅 react-native-edge-to-edge README 的“注意事项”部分。
增强的 SwiftUI 和 Jetpack Compose 集成
SDK 53 增强了 SwiftUI 和 Jetpack Compose 的集成,这为实验性的新 Expo UI 套件 提供了支持。这个库旨在为 React Native 开发者提供访问两个平台的原生 UI 组件的便捷途径。
Expo UI 包含了一些重要的原生平台组件,例如开关、滑块、上下文菜单、选择器和列表,以补充现有的社区库。此软件包仍处于实验阶段并快速发展,因此 API 可能会频繁变化。如果你遇到问题或限制,Expo 团队鼓励你 报告问题。
远程构建缓存支持
SDK 53 引入了对本地构建缓存的实验性支持。通过在应用配置中将 experiments.remoteBuildCache.provider
设置为 eas
,运行 npx expo run:[ios|android]
时将检查是否有匹配的 EAS 构建。如果存在,则下载并启动,而不是再次编译应用,从而可能显著节省开发时间。
在实验期间,EAS 提供的缓存构建数量根据你的计划有限制:
- 免费和按需计划支持 10 个构建
- 生产计划支持 50 个构建
- 企业计划支持 100 个构建(每个计费周期)
关键亮点
React Native 0.79 与 React 19
SDK 53 包含 React Native 0.79 和 React 19.0.0,带来了强大的新功能,例如用于加载状态的 Suspense
和用于上下文和承诺的 use
。详细信息请参阅 React Native 0.79 和 React 19 发布说明。
expo-audio 的稳定发布
在 SDK 52 成功测试后,expo-audio
现已稳定。此库比 expo-av
的 Audio
组件更可靠、更易用、性能更佳且功能更强大,现在官方推荐进行迁移。
新 expo-maps 包
SDK 53 引入了 expo-maps
的 alpha 版本,为平台标准地图 API 提供包装器——Android 上的 Google Maps 和 iOS 上的 Apple Maps。该库建立在现代 Jetpack Compose 和 SwiftUI API 之上。注意,目前 iOS 的最低支持版本为 18,不过计划支持 iOS 17。
Android 的预构建 Expo 模块
为了提升构建时间,SDK 53 包含了 Android 的预编译 Expo 模块,根据硬件不同可减少最多 25% 的本地构建时间。此功能在新项目模板中默认启用,但如有需要可选择退出。
expo-updates 增强
expo-updates
现在允许在运行时使用 Updates.setUpdateURLAndRequestHeadersOverride()
重写标头,使开发者能完全控制客户端的更新。这对于例如在内部员工的预览版本中切换更新等场景特别有用。
React Server Functions 支持
React Server Functions 支持现已进入测试阶段。开发者可以通过设置 EXPO_UNSTABLE_DEPLOY_SERVER
环境变量并在应用配置中启用 experiments.reactServerFunctions
,将这些功能部署到生产环境的 EAS Hosting。
改进的后台任务
新的 expo-background-task
模块使用 Android 和 iOS 上的最新 API,替代已被弃用的 expo-background-fetch
模块。它以优化电源使用的方式支持在后台运行可延迟任务,使用 WorkManager API 在 Android 上和 BGTaskScheduler API 在 iOS 上。
开发构建的 TestFlight 支持
现在可以将开发构建部署到 TestFlight,提供替代设备识别码(UDID)注册每个设备的更简便选择。EAS 用户可使用新的 npx testflight
包尝试此功能。
Expo Router 改进
Expo Router 在 SDK 53 中新增了多个新功能:
- 构建时重定向和重写,以定制 URL 和路由行为
- 虚拟根导航器包装以改进使用初始重定向的身份验证和其他流程
- 增强的快速刷新和错误堆栈跟踪,改善开发体验
- 改进的文档,包括新增的“Router 101”部分
新手理解 SDK 53
如果你是 React Native 或 Expo 的新手,以下是对 SDK 53 带来的内容的简化解释:
Expo SDK 本质上是一套预构建工具和库,使使用 React Native 开发移动应用变得更加容易。可以将它看作一个工具箱,里面包含建造房子所需的一切,而不是需要单独创建或寻找每个工具。
SDK 53 引入了几个重要改进:
- 全屏显示:你的应用内容现在可以在 Android 上(例如顶部的状态栏)流动到系统条的下方,创造更身临其境的体验。这正在成为移动应用的标准,谷歌将很快要求这样做。
- 更好的原生 UI 访问:Expo UI 使在你的 React Native 应用中使用 iOS(SwiftUI)和 Android(Jetpack Compose)原生组件变得更加容易,使你的应用更加原生并减少了所需的工作量。
- 更快的开发:新的远程构建缓存可以通过重用以前构建的应用版本而不是每次都从头构建来节省时间。
- 改进的导航:Expo Router 现在提供了更好的方式来处理页面导航、重定向和 URL 定制,使复杂的应用流程更易于实现。
这些更改旨在使开发 React Native 应用更加快速、高效,并有能力产生更符合每个平台原生感受的更好结果。
重大更改和弃用
SDK 53 包括几个重要的重大更改和弃用:
- expo-av:此包现在已正式弃用,并将在 SDK 54 及以后的版本中不再进行更新。请使用 expo-video 和 expo-audio 代替。
- expo-background-fetch:此包已被 expo-background-task 取代,后者使用现代平台 API。
- React 19 更改:React 19 包含多个重大更改。详情请参考 React 19 升级指南。
- React Native 内部导入:这些已更新为
export
语法,可能会影响某些应用。 - setImmediate polyfill:此功能已从运行时中移除。
- package.json 导出:此功能现在在 Metro bundler 中默认启用,可能会导致某些库的兼容性问题。
尝试测试版发行
初始化使用 SDK 53 Beta 的新项目
# npm npx create-expo-app@latest --template default@sdk-53 # bun bun create expo-app --template default@sdk-53 # pnpm pnpm create expo-app --template default@sdk-53 # yarn yarn create expo-app --template default@sdk-53
升级现有项目
要升级所有依赖项以匹配 SDK 53:
npx expo install expo@next --fix
对于最新的 Expo Go,通过 Expo CLI 启动项目(在运行 npx expo start
后按 'a' 或 'i'),将会自动安装更新版本。iOS 用户可以加入 TestFlight 外部 Beta 以在实体设备上测试。
报告问题
为帮助改善测试版:
- 创建问题,提供一个最小化的可重现示例
- 提及你正在使用 SDK 53 测试版,以便团队可以优先处理
- 如果可能的话,识别潜在的根本原因以帮助加快解决方案的制定
最有帮助的测试者将在最终发布说明中得到认可。你的反馈对于确保一个平滑且稳定的发布至关重要!
留言
張貼留言