Android

[해결방법] The number of method references in a .dex file cannot exceed 64K.

TechNote.kr 2016. 7. 18. 17:29
728x90


Android Studio : 2.1.2

minSdkVersion 15 (Android 4.0.3 APIs)

Google Maps Activity


Google Maps 기반으로 작업할 일이 생겨서 기본 Activity 로 Google Maps Activity 를 선택하고 project 를 빌드해 보았다. 별다르게 코드를 넣은 것도 아닌데 아래와 같은 에러가 발생하면서 빌드가 되질 않는다.


Error:The number of method references in a .dex file cannot exceed 64K.

Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html


Android project 를 빌드하게 되면 VM에서 돌아가게된 byte code로 변환하게 되는데 이를 .dex에 표현하게 된다. 그런데 이 .dex는 64KB limitation이 있어서 그 크기를 넘게 되면 위와 같은 에러가 발생하게 되는 것이다. 


아래 error의 경우는 같은 코드에 gradle의 heap만 2048MB 로 증가시켰을 뿐인데 다른 문구의 에러가 표시되었다. 결론적으로는 같은 내용이긴하다.


Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536



위 문제를 해결하기 위해서는 muldidex를 사용할 수 있도록 multidex support library를 사용해야 한다. 하지만 아래 구글의 가이드를 보면 이 문제를 해결하기 위해서는 2가지 방법이 있는데 그 방법의 기준이 Android 5.0 (Lollipop)이다. 하지만 대개 jeallybean도 지원을 하는 경우가 일반적이기 때문에 

"Multidex support prior to Android 5.0"이 해결책이 될 것이다. 




Multidex support library를 적용하는 방법을 보면 아래와 같다. 


1. 아래 항목을 build.gradle에 삽입한다.


android {

...

    defaultConfig {

...

        // Enabling multidex support.

        multiDexEnabled true

    }

...

}


dependencies {

...

    compile 'com.android.support:multidex:1.0.0'

}



2. 아래 항목을 AndroidManifest.xml에 삽입한다.


    <application

...

        android:name="android.support.multidex.MultiDexApplication">



3. 혹시 위와 같이 했는데 package가 인식되지 않는다면 [File > Project Structure]에 진입해서 com.android.support.multidex 가 포함되었는지 확인해 보고 포함되지 않았다면 추가해 주자.




4. 그래도 안된다 하면 [Build > Rebuild Project] 까지 진행해보자.


5. 위의 과정을 모두 마치고 빌드를 하면 더 이상 에러 없이 정상적으로 빌드가 완성됨을 확인할 수 있다. 아래와 같이 dex 파일도 2개로 분리됨을 확인할 수 있다. 


 dex가 분리되어 있음을 확인해 보려면 아래 글을 참고하여 apk의 위치를 찾아 zip으로 변경후 압축을 풀어보면 알 수 있다. 



[Android Studio에서 빌드 후 apk 위치]



multidex 사용시 제약 사항

[Instant Run 사용이 불가능함]


[Reference]


https://developer.android.com/studio/build/multidex.html

728x90