Expo React Native Bare Workflow集成Firebase编译及运行报错求助
Expo Bare Workflow 集成 Firebase 编译及模块报错解决方案
问题背景
用Expo React Native Bare Workflow(不用Expo Go)集成Firebase时踩了一堆坑:先是编译失败报两类错误,后来勉强能编译了,装@react-native-firebase/database又出现模块未安装的报错。之前的操作流程如下:
- 按Expo官方文档执行:
npx expo install expo-dev-clientnpx expo install @react-native-firebase/app
- 按RN Firebase文档配置:
- 把
google-services.json放到/android/app/目录 - 修改
/android/build.gradle,在buildscript.dependencies里加classpath 'com.google.gms:google-services:4.3.15' - 修改
/android/app/build.gradle,加apply plugin: 'com.google.gms.google-services' - 在
app.json里配置googleServicesFile并添加@react-native-firebase/app插件
- 把
- 跑
npx expo prebuild和npx expo run:android后报错:- 找不到SDK路径,提示要设
ANDROID_HOME环境变量或local.properties里的sdk.dir - 没指定
compileSdkVersion,要加到build.gradle
- 找不到SDK路径,提示要设
- 换
npx expo start选Android能编译,但装完@react-native-firebase/database在App.js里引入后,报错:You attempted to use a firebase module that's not installed on your Android project by calling firebase.app(),手动在MainApplication.java加了ReactNativeFirebaseAppPackage还是没用。
分步解决办法
1. 先搞定SDK路径和compileSdkVersion报错
(1)SDK路径配置
- 要么设环境变量
ANDROID_HOME,指向你Android SDK的安装目录:Windows一般是C:\Users\[你的用户名]\AppData\Local\Android\Sdk,macOS是~/Library/Android/sdk - 要么在
android目录下新建local.properties文件,写一行:sdk.dir=/你的/android/sdk/完整路径
(2)指定compileSdkVersion
打开android/build.gradle,在buildscript里加ext块(没有就新建):
buildscript { ext { compileSdkVersion = 33 // 选你SDK里有的版本,建议33及以上 targetSdkVersion = 33 minSdkVersion = 21 } // 原来的其他内容不动... }
再打开android/app/build.gradle,确保引用这个变量:
android { compileSdkVersion rootProject.ext.compileSdkVersion // 原来的其他内容不动... }
2. 解决database模块未安装的报错
(1)重新安装并预构建
先重新装依赖,确保没漏:
npx expo install @react-native-firebase/database
然后清理旧的预构建文件重新生成,这步很重要:
npx expo prebuild --clean
(2)检查gradle插件位置
打开android/app/build.gradle,把apply plugin: 'com.google.gms.google-services'移到文件最后一行,必须放在所有依赖声明之后,不然会出问题。
(3)删掉手动加的ReactNativeFirebaseAppPackage
Expo预构建会自动配置Package列表,手动加反而会冲突,直接把MainApplication.java里关于ReactNativeFirebaseAppPackage的导入和添加代码删掉。
(4)清理缓存重新编译
执行这条命令彻底清理后编译:
cd android && ./gradlew clean && cd .. && npx expo run:android
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

