You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Android项目中混用不同版本Kotlin的解决方案咨询

解决多模块Android项目中Kotlin插件版本冲突问题

问题核心

根Gradle脚本通过apply:false引入了Kotlin 1.9.20的Android插件,导致全局构建类路径中存在该版本插件;目标app模块尝试引入Kotlin 2.1.0版本的同名插件时,Gradle因不允许同一ID插件多版本共存而报错。

步骤1:修复版本目录的重复别名

你的libs.versions.toml中存在重复的kotlin-android别名,会导致版本被覆盖,先修改为:

kotlin = "1.9.20"
kotlin-v2 = "2.1.0"

[plugins]
# 基础版本(供大部分模块使用)
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }

# V2版本(供目标app模块使用)
kotlin-android-v2 = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-v2" }
kotlin-serialization-v2 = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin-v2" }
kotlin-parcelize-v2 = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin-v2" }

步骤2:移除根脚本中的全局插件声明

打开根目录build.gradle.kts,删除所有Kotlin相关的apply false插件声明,包括:

alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.kotlin.parcelize) apply false

这些声明会将指定版本的Kotlin插件加入全局构建类路径,直接导致版本冲突。根脚本中的ktlint、detekt等插件无需依赖这些Kotlin插件,可正常运行。

步骤3:为目标模块配置独立插件版本

修改目标app模块(:apps:test)的build.gradle.kts,使用V2版本的插件别名:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android-v2)
    alias(libs.plugins.kotlin.serialization-v2)
    alias(libs.plugins.kotlin.parcelize-v2)
}

可选:通过pluginManagement精准控制版本(替代步骤2)

如果需要保留根脚本中的部分Kotlin插件声明,可以在settings.gradle.kts的pluginManagement块中添加版本解析策略,为特定模块指定插件版本:

pluginManagement {
    repositories {
        mavenLocal()
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "org.jetbrains.kotlin.android" || 
                requested.id.id.startsWith("org.jetbrains.kotlin.plugin.")) {
                val targetModule = ":apps:test"
                useVersion(if (project.path == targetModule) "2.1.0" else "1.9.20")
            }
        }
    }
}

该策略会根据模块路径自动匹配对应的Kotlin插件版本,避免全局类路径冲突。

注意事项

  • 目标模块中Kotlin标准库版本会自动与插件版本关联,无需手动额外配置。
  • 若模块间存在依赖,需测试高版本Kotlin编译的代码是否兼容低版本Kotlin模块(Kotlin跨版本兼容性较好,但建议覆盖核心依赖路径测试)。

内容的提问来源于stack exchange,提问作者Javad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:44:59