Execution failed for task ':app:checkDebugDuplicateClasses'.
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable ~
최근에 새로 프로젝트를 생성하여 라이브러리를 넣고 build 를 하던 중 다음과 같은 에러가 발생하는 것을 확인할 수 있었다.
Kotlin 버전이 두개 (1.8.0, 1.7.20)이 같은 프로젝트내에 있어서 중복되었다는 에러인 듯 했다.
따라서 StackOverflow 에 검색을 해봤지만 해결 방법들이 뭔가 석연치 않다는 생각이 들었다. 해당 kotlin 관련 의존성이 내 프로젝트엔 존재하지 않는데 버전을 바꿔보라는 등의 해결 방법을 제시해주었다.
그래도 다행히 다른 답변을 통해 에러를 해결할 수 있는 방법을 알 수 있었고, 내가 발견한 해결책도 제시해보도록 하겠다
duplicate-class-in-kotlin-android
build.gradle 에 다음을 추가해라
dependencies {
modules {
module("org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
}
module("org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk8 is now part of kotlin-stdlib")
}
}
}
갑자기 뚱딴지 같은 소리로 들릴 수 있겠는데 바닐라 프로젝트 즉, 라이브러리를 하나도 추가하지 않은 상태로 프로젝트를 빌드했을 경우 정상적으로 빌드가 되었던 것을 확인할 수 있었다.
그렇다면 어떤 라이브러리를 추가하면서 해당 라이브러리의 버전이 프로젝트의 기존 Kotlin 버전 과 호환이 되지 않기 때문에 해당 라이브러리를 추가하기위해 더 최신버전의 kotlin 의존성을 추가하면서 버전 중복 문제가 발생하게 되었다는 것을 추론해볼 수 있었다.
(잔인한 점은 어떤 모듈에서 문제가 터졌는지 알려주지 않아, 직접 찾아야한다...ㅠㅠ)
그렇게 다 주석처리 후 하나씩 다시 sync 해본 결과 내 경우엔 해당 라이브러리가 문제였다.
// Runtime Compose
implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-beta01"
// implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-alpha03"
위에 버전(최신버전)으로 sync 한 뒤에 빌드하면 duplicate 에러가 발생하고 아래 버전(구버전)으로 downgrade 한 후에 sync 후 빌드하면 정상적으로 빌드가 되어 문제를 해결할 수 있었다.
아예 코틀린 버전을 1.8.0 으로 올려버리는 방법도 있겠으나. 글을 올리는 시점 기준, 또 너무 최신 버전이 부담스러운 사람들이 있을 수 있기 때문에(나도 그렇고) 이 방법을 소개해보았다.
참고 문서)
https://stackoverflow.com/questions/75263047/duplicate-class-in-kotlin-android
https://stackoverflow.com/questions/75265972/task-appcheckdebugduplicateclasses-failed
정말 ... 덕분에 살았습니다...