Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- LG
- 장전
- 국임
- 스마트 멀티탭
- 퇴직한 직장인
- 평강랜드
- 통신3사
- 워렌버핏
- 펜타카메라
- 일반근로자
- 2018 공급계획
- 장기전세
- 공공분양
- 가치투자
- AI 카메라
- 2017년 분양계획
- 시놀로지
- KT
- 국민임대
- 3자녀우선
- 소득조회
- 분양
- 행복주택
- 공공임대
- AOFO Smart power
- 강환국
- SH
- 알뜰폰
- 국립항공박물관
- sh공사
Archives
- Today
- Total
초코비니
안드로이드 MultiDex 지원 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
build-tools 21.1.1부터 MultiDex 지원이 시작되었다.
DexIndexOverflowExcetion 발생
안드로이드 스튜디오에서 빌드하다가 아래와 같은 오류가 발생했다.
Error:Execution failed for task ‘:app:dexDebug‘.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/work/usr/android–sdk–macosx/build–tools/21.1.2/dx –JXmx4g —dex —no–optimize —output/work/myapp/app/build/intermediates/dex/debug —input–list=/work/myapp/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP–LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
위 오류의 주요 내용은
DexIndexOverflowExcetion 이 발생했고, 메소드 ID가 0~65535범위를 벗어났다는 내용이다.
하나의 Dex 파일에 메소드는 65535개가 최대인데 이것을 벗어났다는 의미이다.
오픈소스 라이브러리를 추가하면서 갑자기 오류가 발생했다.
MultiDex
아마.. 안드로이드 OS내부에서 클래스를 로딩하면서 메소드들에 일련번호를 부여하는데 이 일련번호의 데이터 타입이 16비트인가보다. 그럼 구글에서 클래스 로더를 수정해주면 되겠지만.. 이미 배포되어 있는 안드로이드 OS에는 적용할 수 없으니 다른 방법으로 해결해야 한다. 이에 구글에서 내놓은 방법이 MultiDex이다. Dex 파일 한개의 메소드 개수에 제약이 있으니(65535개), 여러 Dex로 하자는 의미이다.
MultiDex를 사용하려면
1. SDK build-tools를 21.1.1이상으로 업그래이드하고,
2. build.gradle을 수정하고
3. Application 클래스를 수정해야 한다.
gradle 설정을 아래와 같이 바꾼다.
build.gradle
apply plugin: ‘com.android.application‘
android {
compileSdkVersion 21
// 빌드툴버전이 21.1.1이상만 가능
buildToolsVersion “21.1.2“
// … 중략 …
defaultConfig {
applicationId “com.test.myapp“
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName “1.0“
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize “4g“
preDexLibraries = false
}
}
dependencies {
// … 생략
// multidex를 추가
compile ‘com.android.support:multidex:1.0.0‘
}
앱의 소스코드 수정
앱의 Application 클래스는 아래와 같이 수정한다.
public class MyApplication extends android.support.multidex.MultiDexApplication
{
// …
}
참고
나중에 시간날때 더 읽어보자.
MultiDex와 관련하여 좀 예전 글이지만 개념파악하는데 도움이 된다.
http://blog.osom.info/2014/10/generating-main-dex-list-file.html
안드로이드 개발자문서: Building Apps with Over 65K Methods
https://developer.android.com/tools/building/multidex.html#about
출처 : http://ohlab.kr/w/?p=153
'안드로이드' 카테고리의 다른 글
[Tip] 어플리케이션 서명(signing) 및 배포, 그리고 debug용 keystore 만들기 (4) | 2015.09.16 |
---|---|
안드로이드(Android) 원본 리소스 raw (0) | 2015.09.16 |
안드로이드 스튜디오 기준(gradle build) v4 충돌 (0) | 2015.09.03 |
This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. (0) | 2015.09.03 |
DateTimePicker (0) | 2015.08.31 |
Comments