本文档于 2022 年 8 月存档,不会收到任何进一步更新。 SDK 46 是 Classic Builds 支持的最后一个 SDK,Classic Build 服务将在 2023 年 1 月 4 日之后停止运行所有 SDK 版本。 请改用 EAS 构建。
经典构建服务允许你使用 Expo CLI 为 Expo 应用创建独立的二进制文件。 你可以使用该二进制文件将应用提交到 Apple App Store 和 Google Play Store 或在模拟器上进行测试。
构建独立的 iOS 应用需要 Apple 开发者账户,但构建独立的 Android 应用不需要 Google Play 开发者账户。 要提交到任一应用商店,你需要该商店的开发者账户。
我们建议你阅读 关于应用商店的最佳实践 以确保你的应用被 Apple 和 Google 商店接受。 一旦你创建了令人惊叹的应用,EAS Build 可以帮助你构建它,然后将其提交到应用商店。
Expo CLI 是构建独立应用所需的命令行应用。 它作为全局 npm 包安装。 如果你尚未安装,请通过 Expo CLI 文档中的安装步骤。
你必须拥有 Expo 账户并登录才能创建构建。 运行构建命令时,你可以创建新账户或登录现有账户。
使用 视窗 操作系统的开发者必须启用 WSL。 如果你尚未安装,请按照此 安装指南。 当提示选择 Linux 发行版时,我们建议从 Windows 应用商店中选择 Ubuntu。 至少启动一次 Ubuntu,然后使用管理 PowerShell 运行命令:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux在 app.json 中,你必须在运行构建命令之前添加一组配置。 下面的代码片段代表了配置的最低所需版本:
{
"expo": {
"name": "Your App Name",
"icon": "./path/to/your/app-icon.png",
"version": "1.0.0",
"slug": "your-app-slug",
"ios": {
"bundleIdentifier": "com.yourcompany.yourappname",
"buildNumber": "1.0.0"
},
"android": {
"package": "com.yourcompany.yourappname",
"versionCode": 1
}
}
}
以下是配置 app.json 或 app.config.js 文件时必须注意的必填字段:
name、icon、version 等字段。bundleIdentifier 和 Android package 字段使用反向 DNS 表示法,但不必与域相关。 将 "com.yourcompany.yourappname" 替换为对你的应用有意义的任何内容。slug 应该是 URL 安全值。 该 slug 将包含在你的应用的 JavaScript 发布到的 URL 中。 例如: expo.dev/@community/native-component-list,其中 community 是用户名,native-component-list 是别名。ios.buildNumber 和 android.versionCode 区分应用的不同二进制文件。 确保为你上传到 App Store 或 Google Play Store 的每个版本增加这些值。你还可以将其他选项添加到 app.json。 例如,一些开发者喜欢配置自己的内部版本号、链接方案等。 我们建议你浏览 Configuration with app.json/app.config.js 了解完整规范。 在此步骤中,还要检查 应用商店最佳实践。 它提供了有关应用商店需要哪些类型的元数据的详细信息。
要开始构建过程,请根据你构建的平台运行 expo build:android 或 expo build:ios。 如果你正在构建的应用没有运行开发服务器,expo 将自动启动它。
当你运行
expo build时,Expo 会自动发布你的应用(使用经典更新的expo publish命令)。 为了避免意外发布对生产应用的更改,你可能需要使用 发布渠道。
在构建 Android 独立应用时,你可以生成两种类型的构建: APK 或 Android 应用包 (aab)。
要构建 APK,请运行以下命令:
- expo build:android -t apk我们建议构建一个 Android App Bundle (aab) 以将应用提交到 Google Play 商店。 要构建 aab,请运行以下命令:
- expo build:android -t app-bundle构建 aab 时,请确保为你的项目启用 Google Play 应用签名。 你可以在 安卓文档 中阅读更多相关信息。
第一次构建应用时,你必须生成 keystore。 如果你熟悉生成密钥库的过程,你可以上传自己的密钥库,也可以让 Expo 处理该过程。
为了让 Expo 处理该过程,请在提示输入密钥库时选择命令行中的第一个选项:
[exp] No currently active or previous builds for this project.
Would you like to upload a keystore or have us generate one for you?
If you don't know what this means, let us handle it! :)
1) Let Expo handle the process!
2) I want to upload my own keystore!
如果你选择第一个选项,则在构建过程完成后运行以下命令是 强力推荐。 运行后,将密钥库备份到安全位置:
- expo fetch:android:keystore将应用提交到 Google Play 商店后,该应用 must 的所有未来更新都将使用 Play 商店最初接受的同一密钥库进行签名。 如果你没有密钥库的本地副本,你将无法将应用的新版本发布到 Play 商店。
如果出于任何原因你将来删除项目或清除凭据,则在不提供相同密钥库的情况下,你将无法向应用提交任何更新。 如果你无法检索梯形校正,你唯一的选择就是生成新的密钥库并将你的应用重新上传为新应用。
如果你在生成密钥库时选择第一个选项,然后决定上传自己的密钥库,则可以使用该选项通过运行以下命令从 Expo 的构建服务器中清除当前的 Android 密钥库:
- expo build:android --clear-credentials这是不可逆的,因此仅当你生成了自己的密钥库时才运行此命令。 你可以详细了解代码签名和密钥库如何在 安卓文档 中工作。
在构建 iOS 独立应用时,你可以生成两种类型的构建: 存档和模拟器。
存档版本用于将应用提交到 Apple App Store 并使用 TestFlight 等功能进行分发。 要构建 iOS 应用存档,请运行:
- expo build:ios -t archive模拟器构建用于在 iOS 模拟器中测试独立应用。 要构建一个,请运行:
- expo build:ios -t simulator在针对 iOS 进行构建时,你可以选择让 Expo 创建你的应用所需的任何必要凭据。 但是,如果你愿意,你仍然可以选择提供自己的凭据。 在此过程中,Expo CLI 将使用你的 Apple ID 和密码。 你的身份验证信息仅在你的计算机本地使用,绝不会发送到 Expo 的服务器。
$ expo build:ios
[16:44:37] Checking if current build exists...
[16:44:37] No currently active or previous builds for this project.
[16:44:37]
We need your Apple ID/password to manage certificates, keys
and provisioning profiles from your Apple Developer account.
Note: Expo does not keep your Apple ID or your Apple ID password.
? What\'s your Apple ID? xxx@yyy.zzz
? Password? [hidden]
✔ Authenticated with Apple Developer Portal successfully!
[16:44:46] You have 4 teams associated with your account
? Which team would you like to use? 3) ABCDEFGHIJ "John Turtle" (Individual)
✔ Ensured App ID exists on Apple Developer Portal!
[16:44:59] We do not have some credentials for you: Apple Distribution Certificate, Apple Push Notifications service key, Apple Provisioning Profile
? How would you like to upload your credentials? (Use arrow keys)
❯ Expo handles all credentials, you can still provide overrides
I will provide all the credentials and files needed, Expo does limited validation
如果你不熟悉 iOS 凭证,建议让 Expo 处理凭证的创建和管理。 要了解有关它们的更多信息,请参阅 应用凭证文档。
如果你熟悉 iOS 凭据并计划提供自己的凭据,请使用 苹果开发者门户 创建它们。
要使用 Apple 的企业发行版构建和分发你的应用,你需要是 Apple 开发者企业计划 的成员。
Expo 的构建服务支持企业分发。 当你运行 expo build:ios 时,你需要选择标有 (In-House) 的正确团队。
此分发方法要求你覆盖自己的凭据。 如果你知道如何生成 iOS 凭证,请使用此发行版。
测试独立应用的最简单方法之一是使用 模拟器构建,然后使用 TestFlight 对物理设备进行测试。 但是,如果你想通过 Xcode 直接在物理设备上构建并安装应用,请按照以下步骤使用 Expo CLI 生成应用:
- expo build:iosDistribution 下选择 Adhoc。- expo build:ios --provisioning-profile-path ~/Path/To/provisioningProfileYouCreated.mobileprovisionExpo 完成构建后,你可以通过 Xcode 将其安装到你的设备上。
Devices & Simulators 窗口Installed Apps 下,单击加号 (+),然后选择 Expo 生成的 IPA注意: 我们为 iOS 启用了位码,因此 iOS 的 .ipa 文件比用户最终可以在 App Store 下载的文件大得多。 欲了解更多信息,请参阅 应用细化。
如果你使用推送通知证书并想要切换到 推送通知键,请使用 --clear-push-cert 选项开始构建。 Expo 将从其服务器中删除旧证书并为你生成推送通知密钥。
Expo 的构建服务使用云服务来构建你的应用。 一旦其中一台机器空闲并准备好使用,构建过程就会开始。 要检查构建的等待时间有多长,请访问 海龟状态 站点。
Expo CLI 会打印一个 URL,你可以访问该 URL 并检查构建的进度和日志。
或者,你可以通过运行以下命令来检查状态:
- expo build:status构建过程完成后,你将获得应用文件的 URL - .apk、.aab(均为 Android)或 .ipa(iOS)文件。 将链接复制并粘贴到浏览器中以下载文件。
想要在构建完成后立即以编程方式收到通知吗? 以下是如何使用 webhooks 进行设置。
expo build:android -t apk 使用 apk 标志构建项目,然后将 .apk 拖放到模拟器中。adb 安装了 Android 平台工具,然后只需运行 adb install app-filename.apk 和 你的设备上启用了 USB 调试 并插入设备即可。expo build:ios -t simulator 使用模拟器标志构建项目,然后在构建完成时下载带有打印链接的工件。 要安装生成的 tar.gz 文件,请将其解压缩并将其拖放到你的 iOS 模拟器中。 如果你想从命令行安装它,请运行 tar -xvzf your-app.tar.gz 解压文件,打开模拟器,然后运行 xcrun simctl install booted <path to .app>。bundleIdentifier 与你在 app.json 中放置的内容相匹配。 现在,你需要使用 Xcode 或 运输车(以前称为应用加载器)上传从 expo build:ios 获得的 .ipa。 完成此操作后,你可以在 Activity 下检查构建的状态。 处理应用可能需要 10-15 分钟才能显示在可用版本中。阅读有关 将应用上传到 Apple App Store 和 Google Play 的文档。
要更新你的应用,请使用 Expo CLI 中的经典更新的 expo publish 命令。 安装应用的物理设备将在下次在该设备上打开应用时下载新的 JavaScript 更新。 为了确保你的应用用户在下载 JavaScript 更新时获得无缝体验,你可能需要启用 后台 JS 下载。
你可能想要重建并重新提交原生二进制文件的原因有几个:
你必须在 app.json 中更新应用的 versionCode 和 buildNumber。 阅读 对你的应用文档进行版本控制 了解更多详细信息。
我们还建议你浏览 app.json 文档 以了解你可以更改的所有属性。 例如图标、深度链接 URL 方案、添加或删除手机/平板电脑支持等。