未修改代码却出现Meteor Cordova项目Kotlin版本不兼容问题
解决Meteor 2.9.0 + Cordova-Android 10 Kotlin版本不兼容构建失败问题
可行解决方案
1. 强制统一Kotlin依赖版本
创建或修改platforms/android/build-extras.gradle文件,添加全局依赖约束,强制所有Kotlin相关库使用同一版本(推荐使用报错中出现的1.7.10,避免依赖冲突):
configurations.all { resolutionStrategy { force 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10' force 'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10' force 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10' } }
同时更新项目中所有硬编码的Kotlin版本配置为1.7.10:
- 修改
android.json中的GradlePluginKotlinVersion值 - 修改
cdv-gradle-config.json中的KOTLIN_VERSION值 - 修改
plugins/@havesource/cordova-plugin-push/plugin.xml中的GradlePluginKotlinVersion值
完成后清理构建缓存并重新构建:
meteor reset rm -rf .meteor/local/cordova-build cordova clean android meteor run android-device
2. 排查间接依赖来源
进入platforms/android目录,执行Gradle命令查看依赖树,定位引入高版本Kotlin的插件或库:
./gradlew dependencies | findstr "kotlin-stdlib"
找到冲突依赖后,可通过build-extras.gradle单独排除该依赖的高版本Kotlin引用,或升级/降级对应插件。
3. 临时跳过版本检查(应急用)
若需要快速构建,可在build-extras.gradle中添加编译参数跳过Kotlin元数据版本检查(不推荐长期使用,可能隐藏潜在问题):
android { kotlinOptions { freeCompilerArgs += ['-Xskip-metadata-version-check'] } }
原因分析
尽管项目所有配置都指定了Kotlin 1.5.20,但部分间接依赖(如androidx.annotation:annotation:1.5.0)本身是用Kotlin 1.7编译的,会自动引入对应版本的Kotlin标准库,导致类路径中同时存在1.5和1.7版本的JAR包,触发版本不兼容错误。Meteor/Cordova的自动构建系统未处理此类隐式依赖冲突,需手动干预统一版本。
内容的提问来源于stack exchange,提问作者veodko
相关产品推荐
相关产品推荐

