Expo托管项目Android生产构建失败:react-native-firebase_messaging编译报错
解决Expo托管React Native项目生产构建
react-native-firebase_messaging编译失败问题 核心问题定位
annotationType(): unrecognized Attribute name MODULE这个错误,本质是**@react-native-firebase各子模块版本不统一**,或是模块版本与当前Expo/React Native版本不兼容,导致编译时注解处理器冲突。开发环境能构建成功,是因为dev profile的编译规则更宽松,而生产环境会严格校验依赖兼容性,把潜在的版本问题暴露了出来。
具体解决步骤
1. 统一@react-native-firebase所有子模块版本
先打开package.json,检查所有@react-native-firebase/*开头的依赖(比如messaging、app、auth等),确保它们的版本号完全一致。比如你用18.7.0,那所有子模块都要对应这个版本。修改后执行npm install或yarn install重新安装依赖。
2. 强制锁定依赖版本(解决自动安装时版本漂移)
如果手动改版本后还是出现不一致,可在package.json里加resolutions字段强制锁定版本:
"resolutions": { "@react-native-firebase/app": "18.7.0", "@react-native-firebase/messaging": "18.7.0", // 把项目里用到的其他@react-native-firebase子模块都加上 }
然后根据包管理器执行对应命令:
- npm用户:先装
npm install -g npm-force-resolutions,再跑npm install - yarn用户:直接执行
yarn install
3. 彻底清理构建缓存
Expo本地和远程的缓存可能残留旧依赖,执行以下命令清理:
npx expo prebuild --clean eas build --clear-cache npm cache clean --force
4. 校验Expo SDK与Firebase版本兼容性
不同Expo SDK版本对应特定的@react-native-firebase版本,比如SDK 49对应18.x,SDK 50对应19.x,版本不匹配必然会引发编译问题。务必确保两者版本完全兼容。
5. 调整Android编译配置(针对Expo托管场景)
如果以上步骤都无效,可在app.json或app.config.js里添加Android编译参数,强制兼容注解处理器:
"android": { "gradleExtra": "android { compileOptions { annotationProcessorOptions { includeCompileClasspath = true } } }" }
验证步骤
修改完成后,先本地跑生产构建测试,确认没问题再提交远程构建:
eas build --platform android --profile production --local
内容的提问来源于stack exchange,提问作者Alexander Obidiegwu
相关产品推荐
相关产品推荐

