React Native重装node_modules后报Kotlin版本冲突错误
问题说明
- 原有React Native项目运行正常,删除
node_modules与package-lock.json后重装依赖,执行npm run android启动安卓端时抛出大量编译错误,Linux、Windows双端均可复现。 - 核心报错日志:
e: /home/abdelhamied/work/personal/ghaith-app/node_modules/react-native-navigation/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt: (76, 28): Class 'kotlin.Unit' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16. The class is loaded from /home/abdelhamied/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.5.30/d68efdea04955974ac1020f8f66ef8176bfbce1f/kotlin-stdlib-1.5.30.jar!/kotlin/Unit.class
- 原项目根目录
build.gradle配置如下:
buildscript { ext { RNNKotlinVersion = "1.3.61" buildToolsVersion = "30.0.2" minSdkVersion = 21 compileSdkVersion = 30 targetSdkVersion = 30 } repositories { google() jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61" classpath("com.android.tools.build:gradle:3.5.3") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } google() jcenter() maven { url 'https://www.jitpack.io' } } }
- 尝试将Kotlin版本从1.3.61修改为1.7.0后,仍然提示Kotlin版本冲突错误。
故障原因
删除package-lock.json后重新安装依赖时,react-native-navigation(简称RNN)被自动升级到了依赖Kotlin 1.5+的新版本,原有项目配置的Kotlin 1.3.61版本过低,无法兼容新版RNN编译出的Kotlin字节码。直接升级Kotlin到1.7.0后仍报错,是因为原项目的Android Gradle插件版本过低不兼容Kotlin 1.7+,且没有同步对齐RNN的Kotlin版本配置、清理旧构建缓存。
修复步骤
- 对齐版本配置
修改根目录build.gradle的buildscript配置块,不要盲目跨大版本升级到Kotlin 1.7.0,选择和报错中匹配的1.5.x版本即可,同时升级Android Gradle插件到兼容版本,修改后配置如下:
buildscript { ext { // 和下方kotlin-gradle-plugin版本保持完全一致 RNNKotlinVersion = "1.5.31" buildToolsVersion = "30.0.2" minSdkVersion = 21 compileSdkVersion = 30 targetSdkVersion = 30 } repositories { google() jcenter() } dependencies { // Kotlin插件版本和上方RNNKotlinVersion完全对齐 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" // 原3.5.3版本Gradle插件不兼容Kotlin 1.5+,升级到匹配的4.1.3版本 classpath("com.android.tools.build:gradle:4.1.3") } }
- 调整Gradle Wrapper版本
打开项目下android/gradle/wrapper/gradle-wrapper.properties文件,将Gradle版本升级到和Android Gradle插件4.1.3匹配的版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
- 彻底清理所有旧缓存
在项目根目录依次执行对应命令,清理残留的旧依赖和构建缓存:
# 清理npm依赖缓存 rm -rf node_modules npm cache clean --force # 清理安卓构建缓存 cd android # macOS/Linux执行以下命令 ./gradlew clean rm -rf .gradle rm -rf ~/.gradle/caches # Windows执行以下命令 # gradlew.bat clean # 手动删除项目android目录下的.gradle文件夹,以及C:\Users\当前用户名\.gradle路径下的caches文件夹 cd .. # 重新安装npm依赖 npm install
- 重新启动项目
执行npm run android即可正常编译运行。
注意:
package-lock.json的作用是锁定所有依赖的安装版本,避免不同时间、不同设备安装时出现依赖隐式升级导致的兼容问题,日常开发不要随意删除该文件。
内容的提问来源于stack exchange,提问作者Abdelhamied mostafa
相关产品推荐
相关产品推荐

