react-native-reanimated:compileDebugJavaWithJavac任务执行失败
尽管已有其他开发者提出过同类问题,但现有公开的解决方案均无法适配我的实际使用场景。
环境信息
System: OS: macOS 12.3.1 CPU: (10) arm64 Apple M1 Pro Memory: 202.25 MB / 32.00 GB Shell: 5.8 - /bin/zsh Binaries: Node: 16.1.0 - ~/.nvm/versions/node/v16.1.0/bin/node Yarn: 1.22.19 - ~/.yarn/bin/yarn npm: 7.11.2 - ~/.nvm/versions/node/v16.1.0/bin/npm Watchman: 2022.03.21.00 - /opt/homebrew/bin/watchman Managers: CocoaPods: 1.11.3 - /opt/homebrew/bin/pod SDKs: iOS SDK: Platforms: DriverKit 21.4, iOS 15.5, macOS 12.3, tvOS 15.4, watchOS 8.5 Android SDK: Not Found IDEs: Android Studio: 2021.2 AI-212.5712.43.2112.8609683 Xcode: 13.4.1/13F100 - /usr/bin/xcodebuild Languages: Java: 11.0.15 - /Users/AH94896/.jenv/shims/javac (使用Java 1.8版本测试得到相同结果) npmPackages: @react-native-community/cli: Not Found react: 16.14.0 => 16.14.0 react-native: 0.64.1 => 0.64.1 react-native-macos: Not Found npmGlobalPackages: *react-native*: Not Found ------------------------------------------------------------ Gradle 6.5.1 ------------------------------------------------------------ Build time: 2020-06-30 06:32:47 UTC Revision: 66bc713f7169626a7f0134bf452abde51550ea0a Kotlin: 1.3.72 Groovy: 2.5.11 Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019 JVM: 11.0.15 (Eclipse Adoptium 11.0.15+10) OS: Mac OS X 12.3.1 x86_64
问题描述
我可以通过执行./gradlew clean命令正常完成项目清理操作,但执行npx react-native run-android启动安卓应用时,构建总会在同一节点失败:
> Configure project :react-native-reanimated No AAR for react-native-reanimated found. Attempting to build from source. Native libs debug enabled: false Android gradle plugin: 4.1.0 Gradle: 6.5.1 building Reanimated2 > Task :react-native-reanimated:compileDebugJavaWithJavac FAILED
构建流程出现异常的具体位置对应以下报错输出:
/Users/AH94896/projects/app/node_modules/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java:13: error: cannot find symbol ViewManagerResolver viewManagerResolver, ^ symbol: class ViewManagerResolver location: class ReanimatedUIImplementation /Users/AH94896/projects/app/node_modules/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java:11: error: recursive constructor invocation public ReanimatedUIImplementation( ^ Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 2 errors FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':react-native-reanimated:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details.
该问题十分反常:我团队内其他成员无论使用Apple M1系列芯片Mac还是Intel芯片Mac,均未遇到同类问题。我已经尝试了所有能检索到的相关解决方案均无效,如果需要更多定位信息可随时告知,该问题目前是我项目推进的严重阻塞点。
解决方案
报错核心原因是react-native-reanimated版本与当前React Native 0.64.1版本不兼容:2.3.0及以上版本的reanimated调用了React Native 0.65+才调整过签名的ViewManagerResolver接口,和当前使用的RN版本不匹配;同时M1芯片下Gradle默认以Rosetta x86模式运行的缓存异常、本地Android SDK路径未正确配置也会触发该问题。
按以下顺序操作即可修复:
- 安装适配RN 0.64.1的reanimated版本:
# 使用yarn执行 yarn add react-native-reanimated@2.2.4 # 使用npm执行 npm install react-native-reanimated@2.2.4 --save - 全量清除构建与依赖缓存:
# 清除watchman监听缓存 watchman watch-del-all # 清除现有依赖与锁文件 rm -rf node_modules yarn.lock package-lock.json # 重新安装依赖 yarn install # 进入android目录清除gradle构建缓存 cd android && ./gradlew clean && cd .. # 清除metro打包缓存 rm -rf /tmp/metro-* - M1芯片环境专项配置:
- 打开Android Studio,进入SDK Manager安装对应版本的Android SDK(当前环境提示
Android SDK: Not Found,必须先完成该步骤,同时在~/.zshrc中配置好ANDROID_HOME环境变量) - 访达中找到Android Studio应用,右键选择「显示简介」,勾选「使用Rosetta打开」,重启Android Studio后等待Gradle同步完成
- 在项目
android/gradle.properties文件末尾追加配置,指定Gradle使用Android Studio自带的arm64架构JDK:org.gradle.java.home=/Applications/Android Studio.app/Contents/jre/Contents/Home
- 打开Android Studio,进入SDK Manager安装对应版本的Android SDK(当前环境提示
- 重新执行构建命令:
npx react-native run-android
如果执行后仍报错,排查是否有第三方依赖强制拉高了reanimated版本:
- 执行
yarn why react-native-reanimated查看依赖树中所有引用reanimated的包,若存在第三方包依赖高版本reanimated,在package.json中添加resolutions字段强制锁定版本:"resolutions": { "react-native-reanimated": "2.2.4" } - 保存后重新执行缓存清理与依赖安装步骤即可。
内容的提问来源于stack exchange,提问作者Mike S.
相关产品推荐
相关产品推荐

