Android Kotlin 中的重复类

mid*_*ers 392 java dependencies android kotlin

图片示例

我不断收到错误,表明类中存在重复错误。 这是我在 org.jetbrains.kotlin 文件夹.idea/libraries下的内容

问题似乎是因为 Kotlin 有两种不同的依赖项,来自stdlibstdlibjdk8,但我不知道如何从我的模块/项目依赖项中删除其中之一。我该怎么做?

这是完整的错误代码:

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)
Run Code Online (Sandbox Code Playgroud)

我尝试从 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'
Run Code Online (Sandbox Code Playgroud)

小智 304

简单地。对我来说,只需将此 Gradle 插件从 1.7.10 更改为 1.8.0 然后同步 \xe2\x86\x92 使缓存 \xe2\x86\x92 构建无效

\n

从:

\n
plugins {\n    ....\n    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false\n}\n
Run Code Online (Sandbox Code Playgroud)\n

到:

\n
plugins {\n    ....\n    id 'org.jetbrains.kotlin.android' version '1.8.0' apply false\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 注意:更新到 '1.8.0' 后,不要忘记将 kotlinCompilerExtensionVersion 更新为 '1.4.0' 。 (68认同)
  • 我收到编译错误:**此版本 (1.3.2) 的 Compose 编译器需要 Kotlin 版本 1.7.20,但您似乎使用的是 Kotlin 版本 1.8.0,该版本尚不兼容。请修复您的配置(或“suppressKotlinVersionCompatibilityCheck”,但不要说我没有警告您!)。** (14认同)
  • @IgorGanapolsky - 您可以在应用程序级别 build.gradle 中将 kotlinCompilerExtensionVersion 更新到 1.4.4。您可以在 ComposeOptions {} 块中找到它。检查下面的链接以找到正确映射的版本(https://developer.android.com/jetpack/androidx/releases/compose-kotlin) (5认同)
  • @PrasannjeetSingh 这是 `build.gradle` 文件 (3认同)

Dav*_*ser 221

请参阅Kotlin 官方文档中的此注释,了解对齐如何与这些依赖项和构建标志配合使用的说明。下面的原始答案是另一种方法,没有考虑到这一点。

这是因为kotlin-stdlib-jdk7kotlin-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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的部分constraints可以与其他依赖项一起添加。选择版本(此处1.8.0)以匹配您实际想要使用的版本,该版本应该是您的非 jdkN 命名版本位于重复类错误中的版本(例如,(org.jetbrains.kotlin:kotlin-stdlib:1.8.0)

如果此文件中有apply plugin: 'kotlin-android'此文件,则不需要单独说明依赖项中的 stdlib,因此请删除如下所示的任何行:

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
Run Code Online (Sandbox Code Playgroud)

(感谢这个博客

  • 我有一个项目,由于与上述相同的原因而构建失败。我的项目中没有使用任何 kotlin 代码。有没有办法禁用所有 kotlin 依赖项,这样我就不可能获得 kotlin 依赖项的“重复类”? (7认同)
  • @AJW您可能认为您在项目中没有使用任何Kotlin代码,但是您使用的依赖项可以在其中使用Kotlin代码(例如各种AndroidX库是用Kotlin编写的)。 (5认同)
  • 现在可以了。您还可以在 [youtrack.jetbrains.com](https://youtrack.jetbrains.com/issue/KT-54136/Duplicated-classes-cause-build-failure-if-a-dependency-to-kotlin- 中找到信息Android 项目中指定的 stdlib)。 (2认同)

小智 150

我已经尝试了以前的所有解决方案,但添加以下代码后它就可以工作了。

dependencies {
   ... ... ...
   implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
   ... ... ...
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管我们的项目是一个纯 Java 项目,没有任何 Kotlin 代码,但这对我来说很有效。它来自这里的线索:https://youtrack.jetbrains.com/issue/KT-55297/kotlin-stdlib-should-declare-constraints-on-kotlin-stdlib-jdk8-and-kotlin-stdlib-jdk7 (8认同)
  • 这也解决了我的问题 (3认同)
  • 这对我也有用。我认为如果您不直接使用 Kotlin,这就足够了。 (2认同)
  • 也为我修复了这个问题:项目是纯 Java(没有 Kotlin)。 (2认同)

Pra*_*nth 60

将 Android 注释库从版本 1.4.0 升级到 1.6.0 后,我遇到了同样的错误,

implementation 'androidx.annotation:annotation:1.6.0'
Run Code Online (Sandbox Code Playgroud)

所以我降级到1.5.0,错误消失了:

implementation 'androidx.annotation:annotation:1.5.0'
Run Code Online (Sandbox Code Playgroud)

  • 我没有在项目中使用 kotlin,这解决了我的问题。 (9认同)
  • 不幸的是,Kotlin 现在是许多 Android 核心库的依赖项,因此无论您是否愿意,现在您都在间接使用 Kotlin。不幸的是,这意味着我们会遇到随之而来的构建问题。 (2认同)

Tra*_*ien 40

升级 kotlin android 插件和 kotlin 编译器

plugins {
    id 'org.jetbrains.kotlin.android' version '1.8.10'
}
android {
    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.3"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 添加插件对我来说很有效,尽管我的项目只是 Java 并且我根本不使用 Kotlin。在我看来,这确实像是 Android Studio 中的一个缺陷,即使不完全是一个错误。 (5认同)
  • 这对我有用。虽然我只需要升级kotlin android插件。谢谢! (3认同)

小智 30

您现在可以将生命周期依赖项更新为最新版本,只需在 build.gradle 中添加以下行即可

dependencies {

    (...)

    // Fix Duplicate class
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

}
Run Code Online (Sandbox Code Playgroud)

  • 一切都很顺利。然后我将 androidx 片段从 1.5.7 更新到 1.6,发生了大约 100 个 kotlin 重复类错误。让我担心的是,当我回到 1.5.7 并删除构建和无效缓存时,它们并没有消失。它就像黑魔法 - 即使您恢复到旧版本,它也会让您感到困惑并坚持下去!这个实现仍然修复了那些重复的类,谢谢 (2认同)

小智 27

我尝试了很多方法来解决这个相同的问题,但没有成功我尝试在我的“ build.gradle(module:app) ”下面添加这个依赖项。

implementation (platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
Run Code Online (Sandbox Code Playgroud)

然后立即同步,它将解决此错误。

  • 多谢。这挽救了局面。我建议大家先尝试一下这个。 (2认同)

Moh*_*hat 23

我通过更改根build.gradle文件中的 Kotlin 类路径依赖关系解决了这个问题

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20-RC"
Run Code Online (Sandbox Code Playgroud)

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
Run Code Online (Sandbox Code Playgroud)


小智 14

在 flutter 中编辑 app/build.gradle 文件

dependencies {

    (...)

    // Fix Duplicate class
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

}
Run Code Online (Sandbox Code Playgroud)


pat*_*val 13

我之前在我们的 SDK 中使用过org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10,然后我将 kotlin 更新到 v1.8.0,就在那时我开始在 Android Java 前端应用程序中收到上述错误。使用org.jetbrains.kotlin:kotlin-bom解决了传递依赖的问题,并且可能是一种更干净的方法,因为它不会将 Kotlin 详细信息泄漏到 Java 应用程序中。

所以我刚刚更换了

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10"
Run Code Online (Sandbox Code Playgroud)

下面为我​​解决了问题。

// Align versions of all Kotlin components
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.0"
Run Code Online (Sandbox Code Playgroud)


Arb*_*lam 13

在build.gradle(Module:app)中添加以下行

dependencies {

(...)

// Fix Duplicate class
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

}
Run Code Online (Sandbox Code Playgroud)

这是因为kotlin-stdlib-jdk7kotlin-stdlib-jdk8是较旧的依赖项,应由kotlin-stdlib替换。但是,其他库可能仍然声明对它们的依赖关系,需要将其替换为对kotlin-stdlib的依赖关系。


小智 11

通过在 build.gradle(app) 文件中添加依赖项可以解决此问题

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0"
Run Code Online (Sandbox Code Playgroud)

它工作正常


小智 8

使用:

configurations.all {
    resolutionStrategy {
        force 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10'
    }
}
Run Code Online (Sandbox Code Playgroud)

将其添加到 Gradle 文件的末尾会有所帮助。


Ash*_*que 7

第 1 步:添加此内容

plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
    }
Run Code Online (Sandbox Code Playgroud)

第 2 步:将其添加到依赖项上

dependencies {

.....

  constraints{
        implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10'
        implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10'
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:版本'1.8.10',jdk7:1.8.10和jdk8:1.8.10是相同的......


Ash*_*kol 6

我的 Kotlin 项目也遇到了同样的错误。当我将 Ktor 添加到我的项目并升级库版本时,然后出现连线长错误。我就是这样解决的。

我使用 compose 版本 1.4.0

ext {
    compose_ui_version = '1.4.0'
}
Run Code Online (Sandbox Code Playgroud)

kotlin版本1.8.0,最新的1.8.10与compose不兼容1.4.0所以我用了,

id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
Run Code Online (Sandbox Code Playgroud)

然后,调整composeOptions应用程序级别的 build.gradle 文件,例如

composeOptions {
    kotlinCompilerExtensionVersion '1.4.0'
}
Run Code Online (Sandbox Code Playgroud)

这是我所做的三项更改,并且我摆脱了有线错误。希望这会对某人有所帮助。


sno*_*lax 6

lifecycle-viewmodel-ktx-2.6.1
Run Code Online (Sandbox Code Playgroud)

向下

lifecycle-viewmodel-ktx-2.5.1
Run Code Online (Sandbox Code Playgroud)

我设法通过降低依赖值来使其工作。


小智 6

我通过使 Compose Compiler 和 JetBrains Kotlin 插件兼容来修复它

首先,确保您使用的org.jetbrains.kotlin.android插件版本高于 1.8.0。

构建.gradle(项目)

plugins {
  ...
  id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
}
Run Code Online (Sandbox Code Playgroud)

然后从下面的链接检查 Compose 编译器的兼容版本并更新build.gradle(app)
https://developer.android.com/jetpack/androidx/releases/compose-kotlin#pre-release_kotlin_compatibility

android {
  ...
  composeOptions {
    kotlinCompilerExtensionVersion '1.4.7'
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

现在早期 KGP 版本的解决方法是:

文件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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

将其添加到您的依赖项中,它将解决该错误

dependencies {

    (...)

    // Fix Duplicate class
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

}
Run Code Online (Sandbox Code Playgroud)


MrP*_*PNG 4

根据 Kotlin 1.8.0 的发行说明(https://kotlinlang.org/docs/whatsnew18.html#updated-jvm-compilation-target),您不应再将kotlin-stdlib-jdk7Nor指定kotlin-stdlib-jdk8为依赖项,而只需使用kotlin-stdlib.