发布于 2026-01-06 6 阅读
0

Expo SDK 38 现已发布 ⏰ 托管工作流新增通知 API 🦋 裸工作流支持构建时更新 ⚡️ 更快的工具,更佳的性能 💡 改进的标签页模板:更简洁,支持深色模式,兼容 TypeScript ✨ 新功能 🛠 API 改进和新增功能 🧹 停止支持 SDK 34;将在下一个版本中停止支持 SDK 35 🌟 ExpoKit → 裸工作流 ⬆️ 使用 Expo CLI 升级您的应用

Expo SDK 38 现已发布

⏰ 托管工作流中的新通知 API

🦋 Bare 工作流程中的构建时更新

⚡️更快的模具,更好的性能

💡 全新标签页模板:更简洁,支持深色模式,采用 TypeScript 编写

✨ 新功能

🛠 API改进和新增功能

🧹 停止支持 SDK 34;下个版本将停止支持 SDK 35

🌟 ExpoKit → 裸工作流程

⬆️ 升级您的应用

Expo CLI

今天,我们正式发布 2020 年夏季版——Expo SDK 38!☀️😎 SDK 38 🍉☀️!SDK 38 延续了我们对可靠性和开发者灵活性的重视,致力于支持 Expo 全套工具中所有可定制的应用。此外,SDK 38 还新增了对 React Native 0.62 的支持、全新和改进的模板,以及一些实用的新模块。

SDK 38 是我们今年计划发布的四个季度 SDK中的第二个。继续阅读,了解更多详情!

⏰ 托管工作流中的新通知 API

今年早些时候,我们对 Expo 通知模块进行了全面重写。我们很高兴地宣布,改进后的 API 现在更加可预测,让您可以更轻松地控制通知,并且与裸机和托管工作流完全兼容!点击此处expo-notifications查看新API的文档

我们尤其喜欢的一项改变是,现在各个平台的通知处理方式保持一致。通知行为现在遵循一个简单的原则:

如果通知是在应用处于后台运行时触发的,

  • 它立即呈现。
  • 申请过程中并未被告知这一点。

如果通知是在应用处于前台运行时触发的,

  • 该应用程序不仅能立即收到相关信息,而且……
  • 它还可以在运行时决定是显示提示信息还是播放声音!(更多信息请参阅通知处理程序文档。)

遗憾的是,由于我们在 2020 年承诺按时发布新版本,因此在准备此模块时未能加入对通知类别的支持。我们正在努力尽快将其加入到项目中expo-notifications,届时它将立即在 Bare 工作流程中可用,敬请期待!

从旧版通知 API 迁移

import { Notifications } from 'expo';为了兼容性,旧版通知 API ( ) 仍保留在 SDK 38 中,但它已被弃用,我们预计将在即将发布的版本中将其移除。

在 Android 系统上,通知一次只能转发到两个 API 中的一个,因此目前您需要通过在应用配置中设置 `on_new_api` 来显式启用新 API android.useNextNotificationsApitrue如果该值为 `undefined` 或false`false`,则推送通知在 Android 系统上将仅转发到旧版通知 API。在 iOS 系统上,您无需额外配置即可使用新 API。

🦋 Bare 工作流程中的构建时更新

在上个版本中,我们推出了expo-updates全新的库,它允许您在任何 React Native 应用中使用空中下载更新。点击此处查看文档

我们最近发布了该库的更新版本,expo-updates@0.2.x它简化了 Bare 工作流应用程序中的更新流程。具体来说,它引入了构建时更新,这意味着

  • 发布版本会在构建时从磁盘上的 JavaScript 源代码创建并嵌入一个新的更新,而不是嵌入你最新发布的更新;
  • 您不再需要expo publish在首次创建发布版本之前运行任何命令。

有关更多详细信息,包括如何从 升级expo-updates@0.1.x,请阅读此指南

⚡️更快的模具,更好的性能

我们特别兴奋地宣布,我们正在进行一些改进,旨在让您的开发和启动体验更加快捷!

首先,我们重新推出了创建 React Native 应用的最快方法。全新升级的版本现在除了支持 iOS 和 Android 之外,还支持 Web,开箱即用 OTA 更新,提供 25 多个模板供您选择,而且零依赖!点击此处create-react-native-app了解更多信息

此外,如果您选择使用更强大的功能expo-cli,您会发现安装速度快得多;我们已将整体磁盘空间占用量减少了高达 2.6 倍。如果您引导启动一个新的 SDK 38 项目,其占用空间node_modules将比类似的 SDK 37 项目小 13%。

这些软件包的性能也得到了提升;我们发布的是转译后的 JS 而不是 JSX,并且放弃了 prop-types 而改用 TypeScript,这两点都带来了更快的编译速度。

💡 全新标签页模板:更简洁,支持深色模式,采用 TypeScript 编写

我们用 TypeScript 重写了标签页模板,剔除了所有冗余部分,专注于开发者构建应用所需的核心功能。此外,我们还加入了暗黑模式支持,因为我们发现,与其后期添加,不如从一开始就考虑好。

iOS 上全新改进的标签页模板

上图展示的是 iOS 系统,但与以往一样,该模板在 Expo 支持的其他平台(Android 和 Web)上也同样适用。

✨ 新功能

  • 验证
  • 谷歌字体
  • 屏幕截图
  • 状态栏
  • 链接
  • 滑块
  • 拾取器
  • 贮存

重新构想的身份验证

我们已expo-auth-session使用 Expo WebBrowser 和 Crypto 等原生组件完全重写了代码。这不仅减小了应用体积,还减少了原生代码重建的需求,因为它可以与多种不同的支付服务商兼容。此外,我们还能在 SDK 版本更新之间持续进行更新,修复 bug 并添加新功能!您可以查看我们针对 15 种以上不同支付服务商的指南,我们会定期更新这些指南。

谷歌字体

https://raw.githubusercontent.com/expo/google-fonts/master/gifs/title.gif

Expo 的软件包 允许您 在 Expo 应用中@expo-google-fonts 轻松使用fonts.google.com上的 991 种字体(及其变体)。

这些软件包和所有字体都可在网页、iOS 和 Android 平台上使用,并且免费开源。更多详情请阅读此处文档

新增屏幕截图模块

为了让开发者更好地掌控应用的安全,我们新增了一个expo-screen-capture模块,允许您在用户进行屏幕录制或截图时隐藏应用内容;如果屏幕显示敏感信息,此功能尤其有用。有关参考资料、示例和限制,请参阅文档

新状态栏模块

我们还创建了一个expo-status-bar模块,它对 React Native 内置的 StatusBar API 进行了一些重要的改进。这个新模块translucent默认将 Android 上的状态栏设置为“显示”,并且还通过 `--light` 和 `--dark` 属性支持浅色和深色模式style="auto"style="inverted"我们已将该模块添加expo-status-bar到所有项目模板中expo-cli。请阅读文档,并查看更新后的“配置状态栏”指南

改进的链接

expo-linking软件包让创建深度链接变得前所未有的容易,这些链接既可以在托管工作流项目中使用,也可以在裸工作流项目中使用,并且可以与 React Navigation v5 和我们的 Auth Session API 无缝集成。

第三方模块

为了提升性能,我们一直在从 React Native 中提取模块。为了保持运行时环境的更新,我们改进了部分提取包的性能,并为其添加了 Web 支持,使其与 Expo 生态系统兼容。

Expo客户端现已提供以下软件包:

  • @react-native-community/slider
  • @react-native-community/picker
  • @react-native-community/async-storage
  • @react-native-community/segmented-control

最后,您现在可以@react-native-community/async-storage在托管工作流应用程序中使用它了。此更改向后兼容,因此您无需更新到 SDK 38 即可开始使用它。此更改不会添加任何新功能或改进,但确实有助于您更轻松地与其他假定您使用该库的库集成@react-native-community/async-storage

这些软件包并非由 Expo 完全维护,因此测试覆盖率、TypeScript 支持和 Web 兼容性可能有所不同。我们将继续仅使用软件包的最稳定版本。

🛠 API改进和新增功能

后台下载和上传expo-file-system

下载外部资源可能是一项复杂的任务,涉及许多特殊情况,例如应用程序切换到后台时的处理。为了解决这个问题,expo-file-system我们现在支持后台下载,即使用户切换应用程序或设备断开网络连接,下载也不会中断。此外,我们还新增了一种原生处理文件上传的方法。更多信息,请参阅文档

新的android.softwareKeyboardLayoutModeapp.json 键

在移动应用中构建表单时,一个棘手的问题是开发者需要确保屏幕上的“软件键盘”不会遮挡当前聚焦的表单元素。Android 允许你选择如何处理这个问题:你可以调整整个窗口的大小,使键盘下方不显示任何内容;或者你可以平移窗口,使内容不位于其下方。控制此功能的原生属性是android:windowSoftInputMode……

过去,所有 Expo 应用都默认配置为使用布局resize模式,但一些开发者发现启用该模式后,诸如标签栏之类的 UI 元素会被推到键盘上方,从而影响应用体验。如果您希望使用该模式pan,现在可以直接在应用配置中设置布局模式。请在“使用 app.json 进行配置”的“android”部分android.softwareKeyboardLayoutMode查找相应的键值

新的android.allowBackupapp.json 键

此版本中新增的另一项安全改进是允许开发者禁用Android 的自动备份功能。对于使用早期 SDK 构建的 Expo 应用,用户的应用数据会自动备份到他们的 Google 云端硬盘。SDK 38 中仍将保持默认设置(与 Android 原生应用相同),但如果您的应用处理敏感信息,则可能需要false在应用配置中将此字段设置为“否”。

React Native 0.62

SDK 38 包含了 React Native 0.62 的许多新特性和改进,其中包括:

  • Appearance通过模块和钩子支持深色模式useColorScheme(请注意,这些 API 不支持 Web,因此react-native-appearance如果这对您的应用程序很重要,您可能需要使用其他方法);
  • 无障碍功能改进,包括新增道具accessibilityValue和事件onSlidingComplete
  • React DevTools 进行了重大改进
  • 可选的全新 LogBox错误和警告体验;

还有更多精彩内容!请查看 React Native更新日志了解更多详情。

Flipper 目前在托管工作流程中不受支持。如果您想使用 Flipper,目前需要使用裸机工作流程(但您仍然可以在裸机工作流程中使用所有您喜欢的 Expo 模块!)。

其他修复和改进

本次版本更新还包含许多其他更改!请查看我们的更新日志了解完整列表。

🧹 停止支持 SDK 34;下个版本将停止支持 SDK 35

为了减少需要支持的版本数量,我们会定期停止维护使用率较低的 SDK 版本。本次发布标志着 SDK 34 的生命周期结束。与往常一样,您使用 SDK 34 构建的独立应用程序将继续运行;但是,SDK 34 项目将无法在最新版本的 Expo 客户端中运行。如果您想重新运行expo build,则需要从 SDK 34 升级,最好升级到 SDK 38,这样您在一段时间内就不需要再次更新(而且每个 Expo 版本都比上一个版本更好!)。

我们的下一个版本计划于九月发布,届时我们将停止对 SDK 35 的支持。如果您的项目正在使用 SDK 35,请考虑在未来几个月内升级到更新的版本。

AR移除

AR 模块(用于调用 iOS ARKit 库)自推出以来一直处于实验阶段,使用并不广泛。我们决定将有限的资源集中到其他方面,而不是继续维护该库。因此,在 iOS Expo 客户端 2.16.0 版本中,所有 SDK 版本均已移除 AR 模块。点击此处了解更多信息。

🌟 ExpoKit → 裸工作流程

去年 12 月,我们公布了 2020 年的计划,将投入巨资,让您能够随时随地使用原生代码灵活地定制应用。今年 3 月,我们宣布Bare 工作流已完全取代 ExpoKit。Bare和 ExpoKit 工作流的功能已达到或超过预期,因此我们在 SDK37 中弃用了 ExpoKit,并且不再支持在新项目中使用 eject 功能切换到 ExpoKit。

按计划,SDK 38 将是 ExpoKit 的最后一个版本。SDK 38 之后,您在 App Store 和 Play Store 中的 ExpoKit 应用将继续无限期运行,但您需要迁移到裸机或托管工作流才能获得 Expo 模块中的错误修复和新功能。

了解更多详情,包括将 ExpoKit 项目迁移到 Bare 工作流程的指南,请参阅这篇博客文章

⬆️ 升级您的应用

以下是如何将您的应用从 Expo SDK 37.0.0 升级到 38.0.0 的方法:

  • 在您的项目目录中运行expo upgrade(需要最新版本expo-cli,您可以使用更新npm i -g expo-cli)。
  • 请务必查看变更日志,了解其他重大变更!
  • 从 App Store / Google Play 更新手机上的 Expo 应用。expo-cli如果您删除现有应用,它将自动更新模拟器中的应用,或者您可以运行expo client:install:iosexpo client:install:android
  • 如果您之前构建过独立应用,请记住,您需要创建一个新的构建版本才能更新 SDK 版本。当您准备好创建新构建版本并提交到应用商店时,请运行expo build:ios以下命令。expo build:android

注意:React Native 0.62在使用动画 API 时引入了一个新的警告Animated。现在,您需要为所有动画指定useNativeDriver:true` useNativeDriver:falseanimated` 属性。

将 ExpoKit 更新至 SDK 38

  • 请按照文档中的说明进行操作。
  • 请注意,SDK 38 将是 ExpoKit 的最后一个更新版本。如需了解更多信息,包括我们的迁移建议,请参阅此博客文章

🗣 如果您有任何疑问或意见,请在我们的社区论坛上分享!我们也欢迎您在 GitHub 上提交问题报告(当然也欢迎提交 PR)。

文章来源:https://dev.to/expo/expo-sdk-38-is-now-available-5aa0