본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android] Duplicate class found.. / android.support, AndroidX 대응

by MinChan-Youn 2024. 11. 20.

 

오랜만에 버그를 만나서 신난 개발자.

 

서드파티 라이브러리를 추가하는 과정에서 다음과 같이 에러를 접하게 되었습니다.

 

Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.IResultReceiver found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.ResultReceiver found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.ResultReceiver$1 found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)
Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules core-1.9.0-runtime (androidx.core:core:1.9.0) and support-compat-26.1.0-runtime (com.android.support:support-compat:26.1.0)

Go to the documentation to learn how to Fix dependency resolution errors.

 

 

Duplicate... 개발을 하다보면 많이 접하게 되는 무시한 단어이죠??

 

이 오류는 AndroidX와 android.support 라이브러리를 함께 사용하는 경우 발생합니다.

AndroidX는 android.support의 후속 프로젝트로, 두 라이브러리를 혼합하여 사용하는 경우 클래스 중복 문제가 발생할 수 있습니다.

해결 방법

1. AndroidX로 전환

AndroidX와 android.support를 혼합하지 않는 것이 가장 좋은 방법입니다. android.support 대신 AndroidX를 사용하도록 프로젝트를 마이그레이션하세요.

  1. gradle.properties에 AndroidX 활성화 추가
    • android.useAndroidX=true: AndroidX 라이브러리로 자동 변환.
    • android.enableJetifier=true: android.support 의존성을 자동으로 AndroidX로 변환.
  2. properties
    코드 복사
    android.useAndroidX=true android.enableJetifier=true
  3. build.gradle에서 android.support를 제거하고 AndroidX로 교체
    gradle
    코드 복사
    dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' // 기타 AndroidX 라이브러리 }
  4. build.gradle에서 android.support 라이브러리 대신 AndroidX 라이브러리를 사용합니다. 예:
  5. 프로젝트를 동기화하고 문제를 해결하세요.

2. 특정 라이브러리 제거

중복된 android.support와 androidx.core 모듈 중 하나를 제거합니다.

  • support-compat 제거
    gradle
    코드 복사
    dependencies { // 제거 // implementation 'com.android.support:support-compat:26.1.0' }
  • build.gradle에서 support-compat 라이브러리를 명시적으로 제거합니다.
  • core 라이브러리 대신 다른 버전 사용
  • core 라이브러리를 다른 버전으로 대체하거나, 프로젝트에 필요한 버전을 명확히 지정하세요.

3. Jetifier를 사용해 android.support를 AndroidX로 변환

기존에 사용 중인 써드파티 라이브러리가 android.support를 사용하고 있다면 android.enableJetifier=true를 통해 자동 변환하도록 설정하세요.


4. Gradle 종속성 충돌 해결

중복된 의존성을 명시적으로 해결하려면 resolutionStrategy를 사용합니다.

gradle
코드 복사
configurations.all { resolutionStrategy { force 'androidx.core:core:1.9.0' // AndroidX 사용 exclude module: 'support-compat' // support-compat 제거 } }

5. 라이브러리 충돌 확인

모든 의존성을 확인하여 android.support와 AndroidX 혼합 여부를 파악하세요.

shell
코드 복사
./gradlew app:dependencies

출력된 의존성 그래프에서 android.support와 androidx가 혼합된 경우 이를 수정하세요.


요약

  • android.useAndroidX=true 및 android.enableJetifier=true를 설정합니다.
  • android.support 라이브러리를 제거하고 AndroidX로 전환합니다.
  • resolutionStrategy를 통해 중복된 라이브러리를 제거하거나 강제로 버전을 지정합니다.
  • 필요한 경우 Gradle 의존성 그래프를 분석해 충돌 원인을 파악합니다.

이 단계를 수행하면 클래스 중복 문제를 해결할 수 있습니다.

 

 

해당 파일에

 

다음과 같이 추가하고 다시 빌드

 

끝.