迁移Android项目至Kotlin 2.0时出现类加载器约束冲突构建错误
Kotlin 2.0迁移时类加载器约束冲突(LinkageError)原因分析
问题场景
原本运行正常的Android应用,仅修改项目根build.gradle中的Kotlin插件版本:
原配置:
id("org.jetbrains.kotlin.android") version "1.9.20" apply false id("org.jetbrains.kotlin.jvm") version "1.9.20" apply false
修改为:
id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.jvm") version "2.0.0" apply false
Android Studio已将Kotlin编译器版本设为2.0.0,但构建时抛出类加载器约束冲突的LinkageError,核心报错信息如下:
> FAILURE: Build failed with an exception. > > * What went wrong: loader constraint violation in interface itable initialization for class > com.android.build.gradle.internal.api.VariantFilter: when selecting > method 'com.android.builder.model.ProductFlavor > com.android.build.api.variant.VariantFilter.getDefaultConfig()' the > class loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382 for super interface > com.android.build.api.variant.VariantFilter, and the class loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @6a9d9b6 of the selected method's class, > com.android.build.gradle.internal.api.VariantFilter have different > Class objects for the type com.android.builder.model.ProductFlavor > used in the signature (com.android.build.api.variant.VariantFilter is > in unnamed module of loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382, parent loader > org.gradle.internal.classloader.CachingClassLoader @6916758b; > com.android.build.gradle.internal.api.VariantFilter is in unnamed > module of loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @6a9d9b6, parent loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382) > > * Try: > > Run with --info or --debug option to get more log output. > > Run with --scan to get full insights. > > Get more help at https://help.gradle.org. > > * Exception is: java.lang.LinkageError: loader constraint violation in interface itable initialization for class > com.android.build.gradle.internal.api.VariantFilter: when selecting > method 'com.android.builder.model.ProductFlavor > com.android.build.api.variant.VariantFilter.getDefaultConfig()' the > class loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382 for super interface > com.android.build.api.variant.VariantFilter, and the class loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @6a9d9b6 of the selected method's class, > com.android.build.gradle.internal.api.VariantFilter have different > Class objects for the type com.android.builder.model.ProductFlavor > used in the signature (com.android.build.api.variant.VariantFilter is > in unnamed module of loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382, parent loader > org.gradle.internal.classloader.CachingClassLoader @6916758b; > com.android.build.gradle.internal.api.VariantFilter is in unnamed > module of loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @6a9d9b6, parent loader > org.gradle.internal.classloader.VisitableURLClassLoader$InstrumentingVisitableURLClassLoader > @4a9dd382) at > com.android.build.gradle.internal.VariantManager.<init>(VariantManager.kt:1023) > ...(后续类似报错内容省略)
可能的原因
- AGP版本与Kotlin 2.0.0不兼容:Kotlin 2.0.0对Android Gradle Plugin(AGP)有最低版本要求,若当前AGP版本过旧,AGP内部的类加载逻辑会与新Kotlin插件产生冲突——不同类加载器加载了
com.android.builder.model.ProductFlavor类的不同版本,导致接口方法签名的类实例不统一,触发约束冲突。 - 构建缓存残留:Gradle构建缓存或Android Studio的IDE缓存中保留了旧版本Kotlin、AGP的类文件,新旧类混合加载时,类加载器无法识别为同一类,引发冲突。
- 依赖传递冲突:Kotlin 2.0.0插件可能引入了与当前AGP依赖版本不一致的库,间接导致
ProductFlavor等核心类被重复加载。
内容的提问来源于stack exchange,提问作者Tobias Reich
相关产品推荐
相关产品推荐

