React Native 0.74.0 Android 构建失败: cannot find symbol FabricJSIModuleProvider 问题解决
2024-10-23 10:27:16
在 React Native 0.74.0 版本发布后,一些开发者在 Android 平台上遇到了构建项目失败的情况。构建过程中,系统会抛出 "cannot find symbol import com.facebook.react.fabric.FabricJSIModuleProvider" 这样的错误信息。 这篇文章将带你一步步分析这个问题的来龙去脉,并提供一些可行的解决办法。
当开发者将 React Native 项目升级到 0.74.0 版本,并尝试使用 npx react-native run-android
命令运行项目时,构建过程可能会在中途停止,并显示类似下面的错误信息:
error Failed to install the app. Command failed with exit code 1: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
/Users/phil/Code/app-name/android/app/src/main/java/com/app-name/app/newarchitecture/MainApplicationReactNativeHost.java:19: error: cannot find symbol
import com.facebook.react.fabric.FabricJSIModuleProvider; ^ symbol: class FabricJSIModuleProvider location: package com.facebook.react.fabric
错误信息直指 FabricJSIModuleProvider,似乎与 React Native 的新架构有关。但奇怪的是,即使在 gradle.properties
文件中明确设置了 newArchEnabled=false
来禁用新架构,问题仍然存在。这让很多开发者摸不着头脑,因为理论上禁用新架构后,Fabric 相关的组件不应该被加载才对。
问题的核心在于,即使关闭了新架构,React Native 0.74.0 的 Android 构建过程依然会引入 Fabric 相关的代码。这是因为 0.74.0 版本对项目结构和依赖关系进行了一些调整,导致即使没有启用新架构,Fabric 的一些组件仍然会被默认包含进来。
更具体地说,MainApplicationReactNativeHost.java
文件中默认包含了 FabricJSIModuleProvider 的导入语句。当新架构被禁用时,这个类实际上是不需要的。编译器在找不到这个类的时候,就会抛出 "cannot find symbol" 的错误。
面对这个问题,我们可以尝试以下几种解决方法:
方法一:注释掉 FabricJSIModuleProvider 的导入语句
最简单的办法是在 MainApplicationReactNativeHost.java
文件中,直接注释掉 FabricJSIModuleProvider 的导入语句。
找到这行代码:
import com.facebook.react.fabric.FabricJSIModuleProvider;
把它注释掉:
//import com.facebook.react.fabric.FabricJSIModuleProvider;
与此同时,在 getJSIModulePackage
方法中,也要把返回 FabricJSIModuleProvider 的代码注释掉:
// @Override
// protected JSIModulePackage getJSIModulePackage() {
// return new FabricJSIModuleProvider(
// reactInstanceManager.getOrCreateReactContext(),
// BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, // <-- only for Android
// new FabricSoLoader()
// );
// }
这个方法可以快速解决编译错误,但要记住,如果以后需要启用新架构,就要把这些注释取消掉。
方法二:清理构建缓存
有时候,构建缓存中残留的旧文件也可能导致问题。我们可以尝试清理构建缓存,再重新构建项目。
使用以下命令清理 Gradle 缓存:
cd android
./gradlew clean
方法三:重新安装 node_modules
如果前面两种方法都不管用,可以试试删除 node_modules
文件夹,然后重新安装依赖:
rm -rf node_modules
npm install
方法四:检查依赖版本
确保项目中使用的 React Native 相关依赖的版本和 0.74.0 兼容。可以查阅 React Native 官方文档或者相关依赖的文档,看看有没有版本冲突或者不兼容的情况。
常见问题解答
-
问:为什么禁用新架构后还会出现 Fabric 相关的问题?
答:React Native 0.74.0 版本的项目结构和依赖关系有所调整,即使禁用新架构,Fabric 的一些组件仍然会被默认包含,导致出现 Fabric 相关的问题。
-
问:除了注释掉导入语句,还有其他解决方法吗?
答:可以尝试清理构建缓存、重新安装 node_modules 或者检查依赖版本。
-
问:如果我以后需要启用新架构,怎么办?
答:如果之前注释掉了 FabricJSIModuleProvider 的导入语句,需要取消注释才能启用新架构。
-
问:遇到其他问题怎么办?
答:可以参考 React Native 官方文档或者社区论坛寻求帮助。
-
问:如何避免这类问题?
答:在升级 React Native 版本时,建议仔细阅读官方发布的更新日志,了解版本变更带来的影响,并根据实际情况进行调整。
希望这篇文章能够帮助你解决 React Native 0.74.0 Android 构建失败的问题。在开发过程中,遇到问题很正常,关键是要学会分析问题,找到解决方法。祝你开发顺利!