首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
在 Expo 仓库中从源码构建 Expo Go:开发环境配置、Android/iOS 编译与 Native Component List 验证
📅 2026/9/7 14:25:14
✍️ 爱科研究院
👁 阅读 3,247
在 Expo 仓库中从源码构建 Expo Go开发环境配置、Android/iOS 编译与 Native Component List 验证【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo本文基于 Expo 官方 monorepo 中的 Expo Go 开发指南系统讲解从源码构建 Expo Go 客户端的完整流程macOS 开发环境如何配置、pnpm setup:native等关键脚本背后的实际行为、Android 与 iOS 两端的具体编译命令以及如何用 Native Component List 应用验证所构建客户端与 Expo SDK 各模块workspace 依赖的联动。读完后你可以独立搭建 Expo Go 的源码开发环境、定位并解决常见的 C/缓存构建问题。一、先判断你是否真的需要构建 Expo Go官方文档在开篇就给出了明确的分流指引如果你只是想安装 Expo Go 到模拟器或真机上无需从源码构建直接通过 Expo 官方渠道安装即可只有当你需要开发 Expo Go 本身时才需要按本文流程操作。此外文档对贡献者给出了两条边界建议Expo SDK 的贡献者开发、测试 SDK 模块改动时应使用仓库中的 Bare Expo 应用apps/bare-expo除非你的改动是 Expo Go 应用自身特有的。普通应用开发者如果你要构建带自定义图标和名称的独立应用应使用 EAS Build如果你需要在 Expo 项目中添加自定义原生模块等原生代码应创建 development build。这两种场景都不需要构建 Expo Go。文档同时提醒向 Expo Go 提交 Pull Request 之前请先与 Expo 团队沟通避免重复投入。一个重要的前提限制官方仅支持在 macOS 上构建 Expo Go。二、环境配置官方六步流程与脚本内部行为文档给出的环境配置步骤为安装 direnv 与 Homebrew → 克隆仓库git clone --recurse-submodules且推荐克隆到完整路径中不含空格的目录→ 在根目录执行brew bundle、pnpm install、pnpm setup:native→ 在packages/expo目录执行pnpm build。下面结合仓库源码说明每一步的真实行为与适用前提。2.1 版本约束根目录 package.json 的engines字段声明了本仓库的运行时要求Node.js^22.13.0 || ^24.3.0 || ^26.0.0 || 27.0.0pnpm^10.33.0。环境搭建前需先满足这两个版本约束。工作区通过pnpm-workspace.yaml与根package.json的workspaces配置管理apps/*、packages/*等子包。2.2pnpm setup:native到底做了什么根 package.json 中定义setup:native: ./scripts/download-dependencies.sh --native ./scripts/setup-react-android.sh查看 scripts/download-dependencies.sh 可知该脚本会检查node、npm、direnv三个命令是否存在缺失则直接报错退出——这就是文档要求先安装 direnv 的原因执行git submodule update --init初始化所有子模块并对每个子模块执行git checkout .恢复干净状态React Native 就是以 Git 子模块形式存在的见下节--native分支下检查 pnpm缺失时通过npm install -g pnpm全局安装然后执行pnpm install。而 scripts/setup-react-android.sh 负责 Android 工具链它要求sdkmanager在 PATH 中或可通过ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager找到随后自动接受 Google 许可协议并依次安装 emulator、NDK21.4.7075529、platform-tools、HAXM、platforms;android-26、build-tools;26.0.3等组件。因此执行该脚本前需要先通过 Android Studio 装好 Android SDK 命令行工具。2.3 根目录其他常用脚本脚本行为见根 package.jsonpnpm install:react-native-lab为 React Native 子模块目录安装 Node 依赖并构建 codegen详见下节pnpm build执行turbo build增量构建各工作区包pnpm setup:docs./scripts/download-dependencies.sh --docs仅初始化docs/文档站依赖三、React Native 实验室构建 Expo Go 的前置依赖Expo Go 并不直接使用 npm 上发布的 React Native而是使用仓库内的react-native-lab。react-native-lab/README.md 说明react-native-lab/react-native是一个指向 Expo 维护的 React Native 仓库的 Git 子模块保持在最新的sdk-*分支上该分支基于上游 React Native 的某个稳定发布版本并叠加少量待上游合并的提交。对应文档构建步骤在 monorepo 根目录执行pnpm install:react-native-lab等价于进入react-native-lab/react-native执行yarn install。根 package.json 中该脚本的实现带有空目录保护若子模块目录为空则跳过并提示因此必须先完成--recurse-submodules克隆或git submodule update --init否则这一步会被静默跳过。可选在react-native-lab/react-native目录执行./gradlew :packages:react-native:ReactAndroid:buildCMakeDebug预构建 React Native Android 依赖。文档指出这属于可选项因为构建 Expo Go 时 RN 终归会被编译但预构建有助于缩小潜在问题的排查范围。Expo Go 的 Android 工程通过 Gradle 配置直接引用该子模块apps/expo-go/android/app/build.gradle 中的react { ... }块将reactNativeDir与codegenDir指向../../react-native-lab/react-native/packages/...并配置debuggableVariants覆盖mobileDebug/mobileRelease/questDebug/questRelease四个变体——由于 Expo Go 的 JS 包由 Metro 在运行时提供而非编译期嵌入所有变体都被标记为 debuggable。四、编译 Expo Go4.1 Android在apps/expo-go/android目录执行./gradlew app:assembleDebug该工程见 apps/expo-go/android/app/build.gradle使用host.exp.exponent作为applicationId与namespace应用名版本号为 Expo Go 客户端版本versionName 56.0.1versionCode 229并通过flavorDimensions device声明了mobile与questMeta Quest 平台两个产品风味。当前仓库的 apps/expo-go/sdkVersions.json 声明的 SDK 版本为57.0.0即该源码构建对应 Expo SDK 57 的 UNVERSIONED 开发态。4.2 iOS在apps/expo-go/ios目录执行pod install然后用 Xcode 打开并运行ios/Exponent.xcworkspace对应 apps/expo-go/ios/Exponent.xcworkspace。iOS 工程目录 apps/expo-go/ios 包含Exponent主 target、ExpoNotificationServiceExtension通知服务扩展、ExponentIntegrationTests集成测试等注意必须打开.xcworkspace而非.xcodeproj否则 CocoaPods 依赖无法被正确解析。4.3 Expo Go 的模块依赖结构Expo Go 自身作为工作区包 apps/expo-go/package.json包名expo/homeprivate: true声明了对几十个workspace:*模块的依赖如expo-camera、expo-location、expo-updates、expo-sqlite等以及react-native 0.87.0、react 19.2.3。两个细节值得注意其expo.autolinking.searchPaths配置了../../react-native-lab/react-native/packages、./node_modules、../../node_modules三个搜索路径并 exclude 自身expo/home这正是原生侧能从子模块而非 npm 包中解析 React Native 的关键apps/expo-go/modules 目录存放 Expo Govendored的原生模块如react-native-view-shot、react-native-webview、react-native-async-storage/async-storage。按 modules/README.md 的说明这些模块会被打补丁应用 Expo Go 特有改动更新时通过工具脚本如et uvm module -c version拉取指定版本并重新应用补丁。五、验证构建产物运行 Native Component List构建完成后文档建议通过 Native Component List 应用验证 Expo Go 与各 Expo 模块的联通性cd apps/native-component-list EXPO_SDK_VERSIONUNVERSIONED npx expo start --clear随后用你刚刚构建出的 Expo Go 应用扫描终端中的二维码打开该应用或在 Metro 终端窗口按i/a快捷键在 iOS 模拟器 / Android 模拟器中打开。EXPO_SDK_VERSIONUNVERSIONED表示使用当前源码树中未发版的 SDK 实现而不是某个已发布 SDK 版本的 API 面——这是开发态验证的核心开关。apps/native-component-list 内含约数百个src/下的组件演示页面*.tsx覆盖相机、定位、传感器、存储等各个模块是端到端排查客户端构建是否正常、某模块是否可用的高价值入口。六、故障排查Troubleshooting文档给出了三级递进的排障方案此处完整保留并补充脚本级说明C 相关编译错误清理 CMake 构建产物缓存.cxxfind . -name .cxx -type d -prune -exec rm -rf {} Android 构建异常先尝试干净构建在apps/expo-go/android目录执行./gradlew clean后重新编译。nuke 核弹方案git submodule foreach --recursive git clean -xfd以及git clean -xfd删除全部未跟踪文件。由于这会同时清掉各子模块内未跟踪内容之后需要重新执行依赖下载脚本 scripts/download-dependencies.sh即重跑pnpm setup:native前半段构建耗时也会相应变长但官方确认该方案有效适合作为最后的兜底手段。七、相关文件索引文件/目录作用apps/expo-go/README.md本文主体Expo Go 源码开发指南apps/expo-go/package.jsonExpo Go 的 JS 依赖与 autolinking 配置apps/expo-go/sdkVersions.json当前 Expo Go 对应 SDK 版本57.0.0apps/expo-go/android/app/build.gradleAndroid 构建脚本含 react-native-lab 路径引用apps/expo-go/ios/Exponent.xcworkspaceiOS Xcode 工作区入口react-native-lab/README.mdReact Native 子模块fork维护策略scripts/download-dependencies.sh子模块初始化与依赖安装--native/--docsscripts/setup-react-android.shAndroid SDK/NDK/平台工具自动安装apps/native-component-list用于验证构建产物的组件演示应用apps/bare-expoSDK 贡献者的开发测试应用Expo Go 的替代入口适用前提小结本文所有命令均以当前仓库实际内容为准要求 macOS 系统、满足根package.json声明的 Node/pnpm 版本、已完成含子模块的仓库克隆Android 侧还需预装 Android SDK 命令行工具链。iOS 侧依赖 CocoaPodspod install与 Xcode。【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/7 14:25:14
Buzz 离线语音转文字实用指南:本地 Whisper 转录从入门到上手
2026/9/7 14:25:14
STM32+GPS模块实战:NMEA协议解析与北斗双模定位优化
2026/9/7 14:25:14
AgentScope 2.0多智能体开发实战:从演示到企业级落地的完整指南
2026/9/7 15:10:20
第11章 人类智能结构
2026/9/7 15:10:20
AI辅助科研全流程:从ChatGPT学术版到AI5.0架构的实战解析
2026/9/7 15:10:19
【单片机毕业设计】基于 STM32 或 51 单片机的环境参数采集与 LCD 阈值显示预警系统设计 基于 STM32 或 51 单片机的智能环境监测与风扇联动报警装置开发(024506)
2026/9/7 15:10:19
【单片机毕业设计】基于 STM32/51 单片机的实验室环境智能调节与蓝牙通信装置 基于 STM32/51 单片机的温湿度超限报警与自动调控系统设计(024406)
2026/9/7 15:10:19
YOLO11转TFLite全流程:INT8量化与移动端部署实战
2026/9/7 15:05:19
AI模型持续更新:从MLOps到版本管理的工程实践
2026/9/7 0:03:59
基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现
2026/9/7 0:03:59
UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南
2026/9/7 0:03:59
BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析
2026/9/7 0:22:31
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/7 0:44:48
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/7 1:55:33
基于CNN的调制信号识别:MATLAB实现时频图分类实战