본문 바로가기

Programming/Android

android Multidex 적용

반응형
테스트 프로그램을 만들거나 프로젝트 초기에는 별문제 없지만
개발하는 소스와 라이브러리가 많아지면서 꼭 발생하는 오류가 있습니다.

LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in

바로 Dex 오류 입니다.

1. 오류 발생 원인
 android apk에는 Dalvik Executable이라는 Dex 파일 존재합니다. 1개의 Dex파일 안에는 참조 될수 있는 함수의 개수는 65,536개 라고 합니다. 위의 에러는 함수가 총 65,536개 이상이 되었을때 발생하는 오류 입니다.
난 저렇게 많이 안썼는데 생각 하실수도 있지만 개발에 필요한 라이브러리 파일들의 함수들 까지 생각한다면 저 숫자는 어느정도 납득할수 있을 것입니다.

그래서 문제의 해결방법으로 Multidex를 적용하는 방법을 알아보도록 하겠습니다.

2. gradle 설정

android {
defaultConfig {
multiDexEnabled true
}
}

dependencies {
compile 'com.android.support:multidex:1.0.1'
}
Multidex를 사용하기위해서 defaultConfig 쪽에 사용하도록 설정 하고
dependecies 를 추가 합니다.

3. 소스 추가(Application이 있는 프로젝트)

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

Application을 만들어서 작업하는 경우 Application 클래스안에서
MultiDex.install 함수를 추가 합니다.


3. 소스 추가(Application이 없는 프로젝트)

<application  android:name="android.support.multidex.MultiDexApplication">
</application>

Application 클래스를 생성하지 않고 프로젝트를 진행하는 경우에는 manifest 안에 직접 MultiDexApplication을 추가 하면 됩니다.


빌드가 잘되던 프로젝트가 갑자기 오류가 나오며 빌드가 되지 않을때 위의문제로 당황하여 시간을 허비 하는 경우가 종종 있습니다.   빌드중 알수없는 오류가 갑자기 발생한다면 시간을 허비하지 않고 인터넷에 검색하는 습관도 중요 한것 같습니다.