本地应用开发
编辑
学习如何在本地编译和构建您的 Expo 应用。
要在本地使用您的机器将项目构建为应用,您必须在测试调试版本或创建用于提交到应用商店的生产版本之前手动生成原生代码。有两种方法可以在本地构建您的应用。此指南提供了两种方法的简要介绍以及必要的其他指南的参考,以创建此工作流程。
先决条件
您需要安装并设置 Android Studio 和 Xcode,以便在本地机器上编译和运行 Android 和 iOS 项目。有关如何设置这些工具,请参见以下内容:
本地应用编译
要在本地构建项目,您可以使用 Expo CLI 的编译命令来生成 android 和 ios 目录:
# 构建原生 Android 项目- npx expo run:android# 构建原生 iOS 项目- npx expo run:ios上述命令使用您本地安装的 Android SDK 或 Xcode 编译您的项目,生成应用的调试版本。
- 这些编译命令最初会运行
npx expo prebuild来生成原生目录(android 和 ios),如果它们尚不存在。如果它们已经存在,则会跳过此步骤。 - 您还可以添加
--device标志以选择要在其上运行应用的设备——您可以选择物理连接的设备或模拟器/仿真器。 - 您可以传入
--variant release(Android)或--configuration Release(iOS)来构建 应用的生产版本。请注意,这些构建没有签名,您不能将其提交到应用商店。要签署您的生产版本,请参见 本地应用生产。 - 仅限 Android:从 SDK 54 开始,您可以传入
--variant debugOptimized变体,以加快开发迭代速度。有关更多信息,请参见 在 Expo CLI 中编译 Android。
要在第一次构建后修改项目的配置或原生代码,您必须重新构建项目。再次运行 npx expo prebuild 会将更改叠加在现有文件之上。构建后,这可能会产生不同的结果。
为避免这种情况,创建新项目时,原生目录会自动添加到项目的 .gitignore 中,您可以使用 npx expo prebuild --clean 命令。这确保项目始终得到管理,而 --clean 标志 将在重新生成之前删除现有目录。您可以使用 应用配置 或创建一个 配置插件 来修改项目的配置或原生目录中的代码。
要了解编译和预构建的工作原理,请参见以下指南:
学习 Expo CLI 如何使用 run 命令在本地编译您的应用,您可以传递给 CLI 的参数以及更多信息。
了解 Expo CLI 如何在编译项目之前生成原生代码。
使用 expo-dev-client 的本地构建
如果您将 expo-dev-client 安装到项目中,则项目的调试构建将包括 expo-dev-client 用户界面和工具,我们称这些为开发构建。
- npx expo install expo-dev-client要创建开发构建,您可以使用 本地应用编译 命令(npx expo run:[android|ios]),这将创建一个调试构建并启动开发服务器。
使用 Android 产品风味的本地构建
仅在 SDK 52 及更高版本中可用。
如果您有一个具有多个产品风味的自定义 Android 项目,使用不同的应用 ID,您可以配置 npx expo run:android 以使用正确的风味和构建类型。Expo 支持 --variant 和 --app-id 来自定义构建和启动行为。
--variant 标志可以将 Android 构建类型从 debug 切换为 release。当以 camelCase 格式配置时,此标志还可以配置产品风味和构建类型。例如,如果您有 免费 和 付费 产品风味,您可以使用以下命令构建应用的开发版本:
- npx expo run:android --variant freeDebug- npx expo run:android --variant paidDebug--app-id 标志可用于使用自定义应用程序 ID 构建后启动应用。例如,如果您的产品风味 free 使用 applicationIdSuffix ".free" 或 applicationId "dev.expo.myapp.free",则可以运行构建并启动应用:
- npx expo run:android --variant freeDebug --app-id dev.expo.myapp.free自定义 Android 构建类型也是可能的,但这将打破 Expo 假设 release 的构建类型用于生产。您可能会使用不同的构建类型构建未优化的代码。
使用 EAS 的本地构建
学习如何在您的自定义基础设施或本地计算机上使用 --local 标志运行 EAS Build。