不使用Expo EAS构建发布Expo托管工作流应用的解决方案咨询
解决方案
1. 停止依赖expo prebuild,手动维护原生项目
一旦通过expo prebuild生成Android/iOS原生文件夹后,不再运行expo prebuild命令。后续添加新Expo模块或更新配置时,直接手动修改原生项目文件:
- 安装Expo模块执行
expo install [module-name]后,参考模块官方文档手动完成原生端配置(如添加权限、修改gradle参数等) - 所有自定义配置(签名、版本号、构建类型等)直接在
android/app/build.gradle或Xcode项目中修改,完全掌控原生文件,避免被覆盖
2. 使用Expo Config Plugins注入自定义配置
通过编写自定义Config Plugin,将build.gradle的配置逻辑固化到Expo配置文件中,每次运行expo prebuild时会自动应用你的自定义配置,不会被覆盖:
- 在项目根目录创建自定义插件文件,比如
withCustomBuildGradle.js:const { withAppBuildGradle } = require('@expo/config-plugins'); module.exports = function withCustomBuildGradle(config) { return withAppBuildGradle(config, config => { // 示例:注入release签名配置 config.modResults.contents = config.modResults.contents.replace( 'android {', `android { signingConfigs { release { storeFile file('my-release-key.keystore') storePassword 'your-store-password' keyAlias 'your-key-alias' keyPassword 'your-key-password' } } buildTypes { release { signingConfig signingConfigs.release } }` ); return config; }); }; - 在
app.config.js中引入该插件:module.exports = { expo: { // 其他项目配置 plugins: ['./withCustomBuildGradle.js'] } }; - 后续运行
expo prebuild时,自定义配置会自动注入到build.gradle中,无需手动修改
3. 用Git版本控制维护自定义配置
如果必须频繁运行expo prebuild,可以通过Git快速恢复自定义配置:
- 将
android/和ios/文件夹纳入Git版本控制 - 运行
expo prebuild前,执行git stash push -m "temp stash custom config"保存自定义修改 - 执行
expo prebuild后,再执行git stash pop恢复之前的自定义配置 - 若出现冲突,手动解决后提交即可
4. 迁移到纯React Native项目
如果彻底不想依赖Expo工具链,可以逐步替换Expo专属依赖为社区等价库,转为纯React Native项目:
- 比如用
react-native-splash-screen替代expo-splash-screen,用react-native-camera替代expo-camera - 初始化全新的React Native项目,迁移业务代码,手动配置所有原生需求,完全脱离Expo的prebuild和EAS工具链
内容的提问来源于stack exchange,提问作者michael
相关产品推荐
相关产品推荐

