Kotlin Android 中的重复类

问题描述 投票:0回答:12

Image Example

我不断收到错误消息,指出类中存在重复错误。 This is what i have under org.jetbrains.kotlin folder .idea/libraries

问题似乎是因为 kotlin 有两个不同的依赖项,来自 stdlib 和 stdlibjdk8,但我不知道如何从我的模块/项目依赖项中删除任何一个。请帮助:(

这是完整的错误代码:

Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.io.path.ExperimentalPathApi found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.io.path.PathRelativizer found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.io.path.PathsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.io.path.PathsKt__PathReadWriteKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.io.path.PathsKt__PathUtilsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.jdk7.AutoCloseableKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0)
Duplicate class kotlin.jvm.jdk8.JvmRepeatableKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.random.jdk8.PlatformThreadLocalRandom found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.streams.jdk8.StreamsKt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$1 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$2 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$3 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$4 found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.text.jdk8.RegexExtensionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)
Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.0 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0)

我试过从 org.jetbrains.kotlin 中删除文件,但每当我在 Android Studio 中构建应用程序时,文件将再次重新下载。

这是我的模块应用程序 gradle 代码


plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}

android {
    compileSdk 33

    defaultConfig {
        applicationId "com.example.umfs"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildFeatures {
        viewBinding true
    }

    namespace 'com.example.umfs'
}

dependencies {


    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.7.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'com.google.firebase:firebase-database:20.1.0'
    implementation 'androidx.preference:preference:1.2.0'
    implementation 'com.google.firebase:firebase-auth:21.1.0'
    implementation 'com.google.firebase:firebase-core:21.1.1'
    implementation 'androidx.navigation:navigation-fragment:2.5.3'
    implementation 'androidx.navigation:navigation-ui:2.5.3'
    implementation 'com.google.firebase:firebase-firestore:24.4.1'
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
    implementation 'de.hdodenhof:circleimageview:3.1.0'
    implementation "androidx.cardview:cardview:1.0.0"
    implementation 'com.google.firebase:firebase-firestore:24.4.1'
    implementation 'com.google.firebase:firebase-storage:20.1.0'
    implementation 'com.google.firebase:firebase-database'
    implementation platform('com.google.firebase:firebase-bom:28.4.0')
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.makeramen:roundedimageview:2.3.0'
    implementation 'com.github.bumptech.glide:glide:4.14.2'
    implementation 'com.github.marlonlom:timeago:4.0.3'
    implementation "androidx.core:core-ktx:+"

}

apply plugin: 'com.google.gms.google-services'
java android kotlin dependencies
12个回答
31
投票

简单。对我来说,只需将此 gradle 插件从 1.7.10 更改为 1.8.0 然后同步。 => 使缓存无效 => 构建

来自:

plugins {
....
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}

致:

plugins {
....
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}

7
投票

这是因为

kotlin-stdlib-jdk7
kotlin-stdlib-jdk8
是较旧的依赖项,应由
kotlin-stdlib
替换(正如@MrPNG 从 kotlin 1.8 的新文档中指出的那样)。但是,其他库可能仍然声明对它们的依赖,需要将其替换为对
kotlin-stdlib
.

的依赖

您可以覆盖 jdk7 和 jdk8 版本的解析方式(在您的

app/build.gradle
中):

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }
}

上面的

constraints
部分可以与其他依赖项一起添加。选择版本(这里是
1.8.0
)来匹配你真正想要使用的版本,应该是你的非jdkN命名版本在重复类错误中的版本(例如
(org.jetbrains.kotlin:kotlin-stdlib:1.8.0)

如果你在这个文件中有

apply plugin: 'kotlin-android'
,那么它不需要单独也说依赖于stdlib in dependencies,所以删除任何看起来像这样的行:

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

(感谢这个博客


6
投票

如果您使用的是 Compose,则需要同时将 Compose 编译器 (https://developer.android.com/jetpack/androidx/releases/compose-compiler) 更新到 1.4.2,将 Kotlin 更新到 1.8.10 .


5
投票

我通过更改根

build.gradle
文件中的 kotlin 类路径依赖关系解决了这个问题

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20-RC"

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"

2
投票

根据 Kotlin 1.8.0 的发行说明(https://kotlinlang.org/docs/whatsnew18.html#updated-jvm-compilation-target),您不应将

kotlin-stdlib-jdk7
kotlin-stdlib-jdk8
指定为不再依赖,而只是使用
kotlin-stdlib
.


1
投票

对于 compose,使用 material3 的稳定版本

androidx.compose.material3:material3:1.0.1

id 'org.jetbrains.kotlin.android' version '1.7.0' apply false


1
投票

这可能是一些更新的版本依赖。在我的新撰写应用程序中,当我更新

实现'androidx.compose.material3:material3:*'(新版本) 从 1.0.0-alpha11

我会得到这个错误。尝试还原更新的依赖项


1
投票

2023 年更新

最近,我遇到了同样的问题,大部分重复的类都属于 Kotlin。其中一个错误是这样的:

Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)

我遇到这个问题是因为我使用的是有问题的 kotlin 版本。将您的 kotlin 版本升级到

1.8.0-Beta
。按照这个:

在您的

android/build.gradle
中,首先在
ext
部分添加:

kotlinVersion = "1.8.0-Beta"

现在,转到依赖项部分并添加:

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"

最后,确保您的

JAVA_HOME
指向JDK11。

做这些解决了我的问题。希望对您有所帮助!


0
投票

我在 2 天前工作时遇到了同样的问题......

我改成

composeOptions {
        kotlinCompilerExtensionVersion '1.3.2'
}

id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
在 build.gradle(项目)中

然后清理并重建项目。


0
投票

我在我的项目中遇到了同样的错误,但我的错误是由具有不同版本的不同 jetpack compose 库引起的,我输入了特定的版本号

"1.3.3"
,这导致找不到其他具有更高版本号的库。我通过使用为每个库提供最新版本的 compose BOM 来解决这个问题


0
投票

我在升级到这两个库后特别注意到了这个问题:

  • Material3
    版本
    1.1.0-alpha05

  • Runtime-livedata
    版本
    1.4.0-beta01

这是完全依赖关系:

implementation 'androidx.compose.runtime:runtime-livedata:1.4.0-beta01'
implementation 'androidx.compose.material3:material3:1.1.0-alpha04'

这是我遇到的错误

Jdk-18.0.2

重复类 kotlin.collections.jdk8.CollectionsJDK8Kt 在 模块 kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) 和 kotlin-stdlib-jdk8-1.7.20

暂时的解决方法是降级这两个库,直到错误被纠正或更新。

implementation 'androidx.compose.material3:material3:1.1.0-alpha04'
implementation 'androidx.compose.runtime:runtime-livedata:1.4.0-alpha01'

请注意,可能还有其他依赖项受到影响,如果您最近升级了依赖项,您可能需要回滚更新并逐个删除库以找出有问题的。


0
投票

升级 kotlin android 插件和 kotlin 编译器

plugins {
    id 'org.jetbrains.kotlin.android' version '1.8.10'
}
android {
    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.3"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.