React Native 0.69升级(Expo裸工程)CMake报错求助
React Native 0.69.7升级CMake构建问题解决方案(Expo裸工作流)
针对你在Expo裸工作流下从RN 0.68.5升级到0.69.7遇到的CMake构建错误、依赖变量缺失、prefab版本不匹配问题,结合你的特殊目录结构与M1环境,给出以下解决方案:
1. 修复CMakeLists.txt缺少project()命令问题
RN 0.69对第三方模块的CMake配置要求更严格,需确保所有涉及的CMakeLists.txt开头存在项目声明:
- 遍历
node_modules下所有带CMake配置的依赖模块,在其CMakeLists.txt最顶部添加:project(模块名称) # 替换为实际模块名,如project(RNReanimated) cmake_minimum_required(VERSION 3.13) - 重新安装并锁定expo-modules-core版本:
yarn add expo-modules-core@0.11.10 --force
2. 解决FBJNI_LIB、FOLLY_LIB等变量未找到问题
该问题源于RN的CMake路径识别错误,结合你的特殊目录结构,手动指定依赖路径:
- 打开
UnnecessaryFolder/android/app/build.gradle,在externalNativeBuild的cmake配置中添加路径参数:externalNativeBuild { cmake { path "src/main/jni/CMakeLists.txt" arguments "-DFBJNI_LIB=${rootProject.projectDir}/../node_modules/react-native/ReactAndroid/build/fbjni/lib/${ANDROID_ABI}/libfbjni.so", "-DFOLLY_LIB=${rootProject.projectDir}/../node_modules/react-native/ReactAndroid/build/folly/lib/${ANDROID_ABI}/libfolly_runtime.so", "-DREACT_NATIVE_DIR=${rootProject.projectDir}/../node_modules/react-native" } } - 在app的
CMakeLists.txt中引入RN的通用CMake配置:set(REACT_NATIVE_DIR ${CMAKE_SOURCE_DIR}/../../../node_modules/react-native) include(${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/ReactNative-common.cmake) - 清理构建缓存后重启构建:
cd UnnecessaryFolder/android && ./gradlew clean
3. 解决prefab库无匹配版本问题
RN 0.69开始使用prefab管理原生依赖,需手动指定兼容版本:
- 打开
UnnecessaryFolder/android/build.gradle,在android块中添加prefab配置:android { ... buildFeatures { prefab true } prefab { fbjni { version "0.2.2" headers "${rootProject.projectDir}/../node_modules/react-native/ReactAndroid/src/main/jni/first-party/fbjni/include" } folly { version "2021.07.22.00" headers "${rootProject.projectDir}/../node_modules/react-native/ReactAndroid/src/main/jni/first-party/folly" } } } - 若仍有问题,删除依赖缓存后重新安装:
rm -rf node_modules yarn.lock yarn install
4. 适配特殊目录结构的额外配置
由于android目录不在package.json同级,需手动指定RN根路径:
- 编辑
UnnecessaryFolder/android/settings.gradle:rootProject.name = '你的应用名称' include ':app' includeBuild('../node_modules/react-native/packages/react-native-gradle-plugin') apply from: "../node_modules/react-native/react.gradle" - 在
UnnecessaryFolder/android/gradle.properties中添加:react.native.dir=../node_modules/react-native
5. M1 Mac Rosetta模式下的注意事项
- 确保所有终端命令在Rosetta模式下运行(右键终端-显示简介-勾选「使用Rosetta打开」)
- 清理Xcode派生数据:打开Xcode-偏好设置-位置-派生数据,删除当前项目的缓存目录
内容的提问来源于stack exchange,提问作者Etai
相关产品推荐
相关产品推荐

