오류/안드로이드

Execution failed for D8 오류 해결 방법 [안드로이드 스튜디오]

낄리 2026. 1. 29. 18:30

 

D8은 안드로이드의 차세대 덱서(Dexer)로, Java 바이트코드를 Android 기기에서 실행 가능한 DEX 코드로 변환하는 역할을 합니다. 이 과정에서 오류가 발생했다는 것은 코드 변환 중 심각한 충돌이 일어났음을 의미합니다.

 

 

 


1. Java 8 컴파일 옵션 및 디슈가링(Desugaring) 설정

가장 흔한 원인 중 하나는 프로젝트가 Java 8 이상의 기능을 사용하고 있음에도 불구하고, Gradle 설정에서 이를 명시적으로 지원하지 않을 때 발생합니다. 람다 식(Lambda expressions)이나 메서드 참조 같은 기능을 사용하려면 '디슈가링' 과정이 원활해야 합니다.

해결 방법: build.gradle (Module: app) 파일의 android 블록 안에 다음 설정을 추가하거나 확인하세요.

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

이 설정은 컴파일러에게 Java 8 호환성을 강제하여 D8 엔진이 바이트코드를 변환할 때 기준을 잡아주는 역할을 합니다.

2. 의존성 충돌 및 중복 클래스 제거

두 개 이상의 라이브러리가 동일한 클래스 파일을 포함하고 있을 때 D8은 어떤 것을 선택해야 할지 판단하지 못하고 오류를 뱉습니다. 주로 com.google.guava, androidx 관련 라이브러리에서 발생합니다.

해결 방법: 터미널에서 다음 명령어를 입력하여 의존성 트리를 확인해 보세요.

./gradlew :app:dependencies

만약 중복된 라이브러리를 발견했다면, 다음과 같이 특정 모듈을 제외(Exclude) 처리해야 합니다.

dependencies {
    implementation('some-library') {
        exclude group: 'com.android.support', module: 'support-v4'
    }
}

3. MultiDex 활성화

안드로이드 앱의 메서드 개수가 65,536개(64K)를 초과하면 단일 DEX 파일에 담을 수 없게 됩니다. 최근에는 라이브러리의 크기가 커짐에 따라 이 한계치에 쉽게 도달하며, 이때 D8 오류가 발생할 수 있습니다.

해결 방법: defaultConfig 내에 MultiDex를 활성화해 주세요.

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}

참고로, minSdkVersion이 21(Android 5.0) 이상이라면 MultiDex가 기본적으로 지원되지만, 설정에 명시해 주는 것이 빌드 안정성 측면에서 유리합니다.

4. 캐시 삭제 및 클린 빌드 (가장 빠른 해결책)

가끔은 설정의 문제가 아니라 안드로이드 스튜디오의 빌드 캐시가 꼬여서 발생하는 유령 같은 오류일 때가 있습니다. 설정을 고쳤는데도 계속 에러가 난다면 캐시를 완전히 비워야 합니다.

  • Step 1: Build -> Clean Project 실행
  • Step 2: File -> Invalidate Caches / Restart 실행
  • Step 3: 프로젝트 루트 폴더의 .gradle.idea 폴더 수동 삭제 (선택 사항)

위 과정을 거치면 D8 엔진이 깨끗한 상태에서 다시 인덱싱을 시작하므로 상당수의 일시적인 오류가 해결됩니다.


💡 핵심 요약 정리

  • Java 8 호환성: compileOptions에서 Java 1.8 버전을 명시했는지 확인하세요.
  • 중복 라이브러리: ./gradlew dependencies로 중복 클래스를 찾아 제외(exclude)하세요.
  • MultiDex: 메서드 수 제한을 넘었을 수 있으니 multiDexEnabled true를 설정하세요.
  • 캐시 초기화: 해결되지 않는다면 Invalidate Caches를 통해 빌드 환경을 초기화하세요.

Execution failed for D8 오류는 결국 "코드를 DEX로 변환하는 규칙"이 어긋났을 때 발생합니다. 위 단계별 가이드를 차근차근 따라 하시면 대부분의 빌드 오류를 극복하실 수 있을 것입니다. 즐거운 개발 되시길 바랍니다!