本地创建调试构建

编辑页面

了解如何为你的 Expo 应用在本地创建调试构建。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

要使用你的机器在本地将项目构建为应用,你必须在测试调试构建或创建用于提交到应用商店的生产构建之前手动生成原生代码。你可以通过两种方式在本地构建应用。本指南简要介绍这两种方法,并提供创建此工作流所需的其他指南链接。

前提条件

你需要安装并配置 Android Studio 和 Xcode,才能在本地机器上编译并运行 Android 和 iOS 项目。有关如何设置这些工具,请参阅以下内容:

本地应用编译

要在本地构建项目,你可以使用 Expo CLI 的编译命令,这些命令会生成 androidios 目录:

Terminal
# 构建原生 Android 项目
npx expo run:android
# 构建原生 iOS 项目
npx expo run:ios

上面的命令会使用你本地安装的 Android SDK 或 Xcode 将项目编译为应用的调试构建。每个命令都会执行两个步骤:先将原生二进制文件编译并安装到你的设备或模拟器上,然后启动 Metro bundler 来提供你的 JavaScript 或 TypeScript 代码。

  • 这些编译命令会先运行 npx expo prebuild,在构建前生成原生目录(androidios),如果这些目录尚不存在的话。如果它们已经存在,则会跳过这一步。
  • 你也可以添加 --device 标志来选择要运行应用的设备——你可以选择物理连接的设备或模拟器/仿真器。
  • 你可以传入 --variant release(Android)或 --configuration Release(iOS)来构建应用的生产构建。请注意,这些构建没有签名,且你不能将它们提交到应用商店。要对生产构建进行签名,请参阅本地应用生产构建
  • 仅限 Android:从 SDK 54 开始,你可以传入 --variant debugOptimized 变体,以加快开发迭代。更多信息请参阅 Expo CLI 参考中的 Android 编译

第一次构建后:使用 npx expo start

一旦应用已编译并安装到你的设备或模拟器上,你就不需要在每次修改后都重新构建。如果你只是在修改 JavaScript 或 TypeScript 代码,你可以单独启动 Metro bundler:

Terminal
npx expo start

然后在终端中按 a(Android)或 i(iOS)来启动已经安装的应用。Metro 会提供更新后的 JavaScript 包,而无需重新编译原生代码,因此应用会在几秒钟内而不是几分钟内加载完成。

命令作用适用场景
npx expo run:android / npx expo run:ios编译原生代码,安装应用,启动 Metro。首次构建、添加原生库之后,或修改配置插件之后。
npx expo start仅启动 Metro bundler。日常开发中只更改 JavaScript 或 TypeScript 代码时。

在首次构建后,如果你要修改项目配置或原生代码,就必须再次使用 npx expo run:android|ios 重建项目。再次运行 npx expo prebuild 会在现有文件之上叠加这些更改。它在构建后也可能产生不同的结果。

为避免这种情况,当你创建新项目时,原生目录会自动添加到项目的 .gitignore 中,并且你可以使用 npx expo prebuild --clean 命令。这确保项目始终处于托管状态,而 --clean 标志 会在重新生成之前删除现有目录。你可以使用应用配置或创建配置插件来修改项目配置,或者修改原生目录中的代码。

要进一步了解编译和 prebuild 的工作方式,请参阅以下指南:

使用 Expo CLI 进行编译

了解 Expo CLI 如何使用 run 命令在本地编译你的应用、可以传递给 CLI 的参数等。

Prebuild

了解 Expo CLI 在编译前如何为你的项目生成原生代码。

使用 expo-dev-client 的本地构建

如果你将 expo-dev-client 安装到项目中,那么项目的调试构建将包含 expo-dev-client 的 UI 和工具链,我们把这类构建称为开发构建。

Terminal
npx expo install expo-dev-client

要创建开发构建,你可以使用本地应用编译命令(npx expo run:[android|ios]),这会创建调试构建并启动开发服务器。

使用 Android product flavors 的本地构建

如果你有一个自定义 Android 项目,并且使用多个具有不同应用 ID 的 product flavor,你可以配置 npx expo run:android 来使用正确的 flavor 和构建类型。Expo 同时支持 --variant--app-id 来自定义构建和启动行为。

--variant 标志可以将 Android 构建类型从 debug 切换为 release。当以 camelCase 格式编写时,此标志还可以配置 product flavor 和构建类型。例如,如果你同时有 freepaid product flavor,你可以这样构建应用的开发版本:

Terminal
npx expo run:android --variant freeDebug

npx expo run:android --variant paidDebug

--app-id 标志可用于在构建后使用自定义应用 ID 启动应用。例如,如果你的 product flavor free 使用 applicationIdSuffix ".free"applicationId "dev.expo.myapp.free",你可以运行以下命令来构建并启动应用:

Terminal
npx expo run:android --variant freeDebug --app-id dev.expo.myapp.free

信息 也可以自定义 Android 构建类型,但这会破坏 Expo 对生产环境使用 release 构建类型的假设。你可能会使用不同于 release 的构建类型,在应用中构建未经优化的代码。

使用 EAS 的本地构建

在你的基础设施上运行构建

了解如何使用 --local 标志在你自己的自定义基础设施上或在本地机器上运行 EAS Build。