2017. 5. 16. 17:13 IT/Android
안드로이드 Multidex
안드로이드 Multidex
안드로이드는 하나의 앱이 가지거나 참조할 수 있는 총 메쏘드의 갯수가 65536개로 제한되어 있다.
이는 하나의 Dalvik Executable (dex) 파일이 참조하여 호출할 수 있는 최대 갯수이다.
혼자 뚝딱뚝딱 만들어보는 프로젝트라면 사실 별 상관이 없겠지만, android support library 나, 여러 오픈소스 library 를 추가하여 빌드할 경우, 이 갯수는 안전한 갯수가 아니고, 빌드 시 아래와 같은 에러가 발생할 수 있다.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
구글에서는 이 문제를 해결하기 위해 세가지 방안을 제시하고 있다.
1. 경량의 라이브러리를 사용하거나 리팩토링을 잘 해서 메쏘드의 수를 줄일 것
2. Proguard 기능을 사용하여 사용하지 않는 코드를 없앨 것
3. Multidex 기능을 사용할 것
여기서는 Multidex 기능을 사용해서 문제를 회피하는 방법을 사용할 것이다.
Multidex 는 여러개의 dex 파일을 사용하도록 해서, 65536 개 이상의 메쏘드를 참조할 수 있도록 해준다.
gradle 파일에 아래와 같이 추가해주면 된다.
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
ART가 반영된 5.0 버전 (SDK Version 21) 이상에서는 위와 같이 사용하면 된다. 하지만 그 이전 버전이라면? 예를 들어 minSdkVersion 이 21 보다 작다면 구글에서 제공하는 multidex support library 를 사용해야 한다.
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
또, application 을 android.support.multidex.MultiDexApplication 을 상속받도록 구현한다.
Manifest 파일을 아래와 같이 고치거나,
<!--?xml version="1.0" encoding="utf-8"?-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication">
<application ...="" android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
Application 파일을 아래와 같이 수정한다.
public class MyApplication extends android.support.multidex.MultiDexApplicatoin {
// ...
}
Multidex Support Library 를 사용할 경우, 부작용이 하나 있는데, 빌드 속도가 상당히 느려진다. 짧게는 몇십초부터 길게는 수 분에 이르기까지 시간이 지연된다.
안드로이드 5.0 이상아리면 큰 문제가 없지만, 그 이전 버전을 지원하는 앱이라면 이는 속터지는 문제일 수 있다.
하지만 이는 별다른 수는 없는 것 같고, 그저 테스트시는 minSdk 를 21 이상, 릴리즈 시는 그 이전 버전으로 설정하는 수 밖에 없다.
이는 Gradle 스크립트로 처리할 수 있지만, 확인해야 하는 단말의 OS 가 5.0 이전 버전이라면 확인하기 위해 오래 기다리는 수 밖에 없다.
출처: http://bbulog.tistory.com/41 [뿔로그]
'IT > Android' 카테고리의 다른 글
안드로이드 키보드 입력 모드 설정(adjustPan, adjustResize). (0) | 2017.06.21 |
---|---|
안드로이드 구글 연동 로그인 디지게 안될 때 체크할 내용. (0) | 2017.05.18 |
안드로이드 생명 주기(라이프 사이클) 및 Override 함수. (0) | 2017.03.06 |