已配置JDK17但Gradle仍编译旧Java版本,RN项目报错
React Native Reanimated编译报错修复方案
问题描述
系统环境:Ubuntu,React Native 0.72.5,OpenJDK 17.0.13
项目此前运行正常,打包APK后无法在设备/模拟器启动,编译报错如下:
> Task :react-native-reanimated:compileDebugJavaWithJavac FAILED Note: Recompile with -Xlint:deprecation for details. /home/trsuser/Desktop/Projects/Trois/HRMS-MOBILE/Hrms-app/node_modules/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java:356: error: pattern matching in instanceof is not supported in -source 11 if (props.get(Snapshot.TRANSFORM_MATRIX) instanceof ReadableNativeArray matrixArray) { ^ (use -source 16 or higher to enable pattern matching in instanceof) /home/trsuser/Desktop/Projects/Trois/HRMS-MOBILE/Hrms-app/node_modules/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/NodesManager.java:440: error: switch rules are not supported in -source 11 case "opacity" -> { ^ (use -source 14 or higher to enable switch rules) 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.
问题根源:React Native Reanimated v3.5.4依赖Java 16+特性,但Gradle编译第三方模块时仍以Java 11为目标版本。用户已在app/build.gradle中配置Java 17编译选项,但未覆盖第三方模块的编译规则。
用户当前app/build.gradle关键配置片段:
android { // ...其他配置 compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlin { jvmToolchain(17) } // ...其他配置 }
修复步骤
1. 配置项目根目录build.gradle,统一所有模块Java版本
打开项目根目录下的build.gradle(非app子目录下的文件),添加subprojects块,强制所有模块(包括第三方依赖)使用Java 17编译:
subprojects { afterEvaluate { project -> if (project.hasProperty('android')) { project.android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlin { jvmToolchain(17) } } } } }
2. 配置gradle.properties指定Gradle运行环境
在项目根目录的gradle.properties文件中添加以下参数,确保Gradle使用Java 17执行:
org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" android.useAndroidX=true android.enableJetifier=true
注意:org.gradle.java.home的路径需匹配你Ubuntu系统中OpenJDK 17的实际安装路径,可通过update-alternatives --list java命令查看。
3. 清理缓存并重新构建
执行以下命令清理编译缓存,重新构建项目:
cd android ./gradlew clean cd .. npx react-native run-android
备选方案(若上述步骤无效)
删除本地依赖缓存后重新安装:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者LoneWolf
相关产品推荐
相关产品推荐

