记一个 Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8 编译问题引发的案例

文章讲述了作者在升级Android项目中的Kotlin版本到1.8.0后遇到Duplicateclass问题,通过添加KotlinBOM清单、升级kotlin-stdlib依赖和排除旧版本库等方式解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于要吃饭的原因,要搞一下android原生开发,下载最新的android studio 2202.3.1,用默认的向导生成了一个android project。报了一堆错,我以为是android studio没有安装好的原因,想尽办法清理了android studio的安装,重新安装后,还是报错,在其他的电脑也是同样的情况

实际只有两个错,一个是sdk的版本。我用的是33, 但是依赖库要求就34。第二个错误,就是Duplicate class的,用这个转帖的文章的方法二,解决问题。

我这里修改的配置如下 build.gradle.kts(module:app)

plugins {
    id("com.android.application")
}

android {
    namespace = "com.example.s02"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.s02"
        minSdk = 24
        targetSdk = 33
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    buildFeatures {
        viewBinding = true
    }
}

dependencies {
    //-------------以下是加入下面的内容
    constraints {
        add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
            version {
                require("1.8.0")
            }
        }
        add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
            version {
                require("1.8.0")
            }
        }
    }
    //-------------以上是增加的内容
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.9.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
    implementation("androidx.navigation:navigation-fragment:2.7.0")
    implementation("androidx.navigation:navigation-ui:2.7.0")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

-----------------------------------------分割线-----------------------------------

某天将项目 kotlin 版本升级到了 1.8.0 ,然后编译报错了,
Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8
然后开始寻求解决方案...

Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8

kotlin-stdlib

kotlin 1.8.0 基于 JVM 1.8 编译,不再支持 JVM 1.6 和 1.7。后续不用单独在build.gradle 依赖 kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8。

If you have explicitly declared kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 as dependencies in your build scripts, then you should replace them with kotlin-stdlib.

解决 Duplicate class 的编译问题

  • 方法一
    使用 kotlin-bom 清单
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
  • 方法二
    强制把 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 升级到 1.8.0
dependencies {
    constraints {
        add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
            version {
                require("1.8.0")
            }
        }
        add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
            version {
                require("1.8.0")
            }
        }
    }
}
  • 方法三
    手动移除 kotlin-stdlib,不推荐
dependencies {
     implementation("com.example:lib:1.0") {
      exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
  }
}

参考文档:Configure a Gradle project | Kotlin Documentation

kotlin-bom 库版本清单表

  • org.jetbrains.kotlin » kotlin-stdlib

  • org.jetbrains.kotlin » kotlin-stdlib-jdk7

  • org.jetbrains.kotlin » kotlin-stdlib-jdk8

  • org.jetbrains.kotlin » kotlin-stdlib-js

  • org.jetbrains.kotlin » kotlin-stdlib-common

  • org.jetbrains.kotlin » kotlin-reflect

  • org.jetbrains.kotlin » kotlin-osgi-bundle

  • org.jetbrains.kotlin » kotlin-test

  • org.jetbrains.kotlin » kotlin-test-junit

  • org.jetbrains.kotlin » kotlin-test-junit5

  • org.jetbrains.kotlin » kotlin-test-testng

  • org.jetbrains.kotlin » kotlin-test-js

  • org.jetbrains.kotlin » kotlin-test-common

  • org.jetbrains.kotlin » kotlin-test-annotations-common

  • org.jetbrains.kotlin » kotlin-main-kts

  • org.jetbrains.kotlin » kotlin-script-runtime

  • org.jetbrains.kotlin » kotlin-script-util

  • org.jetbrains.kotlin » kotlin-scripting-common

  • org.jetbrains.kotlin » kotlin-scripting-jvm

  • org.jetbrains.kotlin » kotlin-scripting-jvm-host

  • org.jetbrains.kotlin » kotlin-scripting-ide-services

  • org.jetbrains.kotlin » kotlin-compiler

  • org.jetbrains.kotlin » kotlin-compiler-embeddable

  • org.jetbrains.kotlin » kotlin-daemon-client

具体版本对应关系:
kotlin-bom 库版本对应表查询:https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-bom

作者:SharpCJ

出处:https://www.cnblogs.com/joy99/p/17398903.html

本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值