본문 바로가기
Programming/Android

[Android] Cannot fit requested classes in a single dex file

by SpiralMoon 2019. 11. 26.
반응형

Cannot fit requested classes in a single dex file

Android나 Flutter 개발을 하다보면 잘 컴파일되던 소스코드가 갑자기 "Cannot fit requested classes in a single dex file"이라는 메시지와 함께 컴파일 오류를 내는 경우가 있다.

원인

single dex error stack

안드로이드 공식 문서에는 다음과 같이 쓰여있다.

 

앱 및 앱이 참조하는 라이브러리에서 메서드가 65,536개를 초과하면 앱이 Android 빌드 아키텍처의 제한에 도달했음을 알리는 빌드 오류가 발생합니다.

개발에 실수해서 생기는 오류는 아니고 그냥 프로젝트에 포함된 총 메소드의 갯수가 65,536개가 넘어가면 발생하는 오류이다. (메소드 수는 라이브러리 내부의 메소드까지 포함한 수치)

위의 사진을 보면 현재 프로젝트에 메소드가 68,396개가 포함되어 있기 때문에 65,536개를 초과하므로 오류가 발생했다고 알려주고 있다.

 

안드로이드 프로젝트는 컴파일을 할 때 dex 바이트코드 파일이 생성되는데 65,536이라는 숫자는 이 파일 내에서 코드가 호출할 수 있는 참조의 총 개수를 나타낸다. 그래서 수를 초과하면 오류가 발생하는 것이다.

 

(※ 65,536은 64 X 1024이므로 64K 참조 제한 문제라고도 부른다.)

해결 방법

dex 파일을 한 개가 아닌 여러 개를 사용하도록 설정하면 된다.

 

android {

	...

    defaultConfig {
    	...
        
        multiDexEnabled true // << 추가
    }
    
    ...
}

app 레벨의 build.gradle 파일에 위와 같이 multiDexEnabled true를 추가한다.

 

dependencies {
    ...
    
    implementation 'com.android.support:multidex:1.0.3' // << 추가
}

마찬가지로 app 레벨의 build.gradle 파일에 위와 같이 의존성 패키지를 추가한다.

 

이렇게 하면 컴파일 할 때 다중으로 dex 파일을 읽고 빌드할 수 있게 해주므로 문제가 해결된다.

관련 문서

 

64K가 넘는 메서드의 앱에 관해 multidex 사용 설정  |  Android Developers

앱이 여러 DEX 파일을 빌드하고 읽을 수 있도록 하는 multidex라는 앱 구성의 사용설정 방법에 관해 알아보세요.

developer.android.com

 

반응형

'Programming > Android' 카테고리의 다른 글

[Android] 403. Error: disallowed_useragent  (0) 2020.07.06

댓글