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 사용시 제약 사항
[Reference]
'Android' 카테고리의 다른 글
Android - Material icon 의 사용 in Android Studio (0) | 2018.12.27 |
---|---|
Android Studio, 외부 java library (.JAR, .AAR) 추가 (0) | 2017.02.13 |
Android Studio, module 삭제. (0) | 2016.07.19 |
Android Studio, Instant Run 에 대한 이해 (0) | 2016.07.18 |
[해결방법] To run dex in process, the Gradle daemon needs a larger heap. (0) | 2016.07.18 |
Android - Android Studio에서 빌드 후 apk 위치. (0) | 2016.07.18 |
Messenger, SNS API 등을 통한 친구 목록 가져오기. (0) | 2016.03.18 |
Android - Media File이 Media List에 자동 추가되는 것 방지 방법 (0) | 2016.03.05 |