在 Expo 仓库中从源码构建 Expo Go:开发环境配置、Android/iOS 编译与 Native Component List 验证

发布时间:2026/10/28 9:50:23

在 Expo 仓库中从源码构建 Expo Go:开发环境配置、Android/iOS 编译与 Native Component List 验证 在 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),仅供参考
延伸阅读

更多相关文章

2026/10/28 12:44:51

深挖context_switch:进程切换中mm与内核栈的完整交接机制

进程切换这事,表面上看就是调度器挑个新任务,然后“切换上下文”。可真钻进内核代码,你会发现“切换上下文”这四个字背后站着两个完全不同的世界:一个是用户地址空间的搬运,一个是内核栈的接力。我在读 __schedule …

2026/10/28 15:09:07

擦亮眼睛!并非所有 AI 都能帮你写论文,2026 导师推荐工具盘点

每年毕业季,无数同学深陷论文难题:开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对这些痛点,许多学生将希望寄托在AI工具上,然而市面上的通用型AI工具虽种类繁多,…

2026/10/28 18:38:59

基于Springboot汽车维修预约服务系统【附源码+文档】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 18:38:59

GCC不是C/C++标准,而是标准合规性守门人

简介:本资源为Windows平台下开箱即用的C/C标准GCC编译环境,面向初学者、嵌入式开发者及跨平台编程学习者,解决在Windows中缺乏原生GNU工具链导致的编译环境搭建困难问题。压缩包含1508个文件,总大小71.1MB,核心包括716…

2026/10/28 18:38:59

NUIST程序设计基础OJ题库:从WA到AC的判题原理与避坑指南

简介:这份资源是南京信息工程大学(NUIST)程序设计基础课程的OJ题库配套资料,面向正在学习C或Java编程、准备算法训练与课程实践的学生,也适合希望系统刷题巩固数据结构与算法设计能力的自学者。压缩包为zip格式&#x…

2026/10/28 18:38:59

3D Design for AI插件开发指南:从提示词到三维网格的工程实践

简介:这是一款面向Adobe Illustrator用户的增强型三维效果处理插件,主要解决AI原生3D功能有限、平面设计师难以在熟悉工作流中完成立体建模的问题。它适合希望将二维设计快速转化为具有深度与维度作品的平面设计师、插画师及视觉创作者,无需在…

2026/10/28 18:38:58

音频响应动效插件怎么拆:分析器、映射器与渲染适配器

同一个节奏动效要支持 SVG 和 Canvas,没必要让一个大类同时管理音源、频谱、颜色和绘图句柄。先固定交换的数据,再分别接入分析器、映射器与渲染器。 三层之间传小对象 分析器输出 time、rms、bands,映射器把指标变成有界视觉强度&#xff…

2026/10/28 18:33:57

Visual Studio 2022 插件离线安装进度可视化方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑