반응형
안드로이드 애플리케이션을 개발하다 보면 모든 기능을 개발하면 좋겠지만 시간과 인력의 제약 때문에 외부 라이브러리를 다수 사용하게 됩니다. 외부 라이브러리를 많이 쓰면 애플리케이션 전체 메서드의 개수가 65536 개가 넘어갈 수 있습니다.
빌드중에 다음과 같은 에러가 발생하고 빌드가 중지되게 됩니다.
- 오류메시지
- <textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="box-sizing: border-box; color: rgb(0, 0, 0); font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; margin: 0px; overflow: hidden; display: block; width: 1138px; height: 30px; padding: 0px 5px; border-width: 0px; border-style: initial; vertical-align: top; max-width: 100%; opacity: 0; border-radius: 0px; box-shadow: none; white-space: pre; word-wrap: normal; resize: none; tab-size: 4; font-size: 12px !important; line-height: 15px !important; font-family: Monaco, MonacoRegular, "Courier New", monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1Conversion to Dalvik format failed:
2Unable to execute dex: method ID notin[0,0xffff]:65536
또는
<textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="box-sizing: border-box; color: rgb(0, 0, 0); font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; margin: 0px; overflow: hidden; display: block; width: 1138px; height: 45px; padding: 0px 5px; border-width: 0px; border-style: initial; vertical-align: top; max-width: 100%; opacity: 0; border-radius: 0px; box-shadow: none; white-space: pre; word-wrap: normal; resize: none; tab-size: 4; font-size: 12px !important; line-height: 15px !important; font-family: Monaco, MonacoRegular, "Courier New", monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
1trouble writing output:
2Too many field references: 131000; max is 65536.
3You may try using --multi-dex option.
- <textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly="" style="box-sizing: border-box; color: rgb(0, 0, 0); font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; margin: 0px; overflow: hidden; display: block; width: 1138px; height: 30px; padding: 0px 5px; border-width: 0px; border-style: initial; vertical-align: top; max-width: 100%; opacity: 0; border-radius: 0px; box-shadow: none; white-space: pre; word-wrap: normal; resize: none; tab-size: 4; font-size: 12px !important; line-height: 15px !important; font-family: Monaco, MonacoRegular, "Courier New", monospace !important; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"></textarea>
- 해결
이를 해결하기 위해서는 메서드의 개수를 줄이거나 multi dex 라는 기법을 사용해서 앱을 패키징해야 합니다. 현실적으로 메서드의 개수를 줄이는데에는 한계가 있으므로 안드로이드 스튜디오에서 multi dex 를 적용하는 방법을 알아보겠습니다.
다음과 같이 build.gradle 파일을 수정합니다.
- android > defaultConfig 에 applicationId와 multiDexEnabled true를 추가합니다.
- depenencies에 compile ‘com.android.support:multidex:1.0.0’ 를 추가합니다.
Application 객체를 정의해서 사용한다면 Application를 상속받는 것이 아닌 MultiDexApplication을 상속받는 형식으로 수정합니다.applicationId 는 프로젝트의 id 를 지정하도록 합니다.
android {
…
defaultConfig {
…
applicationId ”com.example.myexample”
multiDexEnabled true
…
}
…
}
depenencies {
…
compile ’com.android.support:multidex:1.0.0’
…
}
|
public class MyApp extends MultiDexApplication { … } |
- Application 객체를 사용하지 않는 다면 AndroidManifest.xml 의 Application 태그에 name 속성을 지정합니다.
<application android:name=”android.support.multidex.MultiDexApplication” </application> |
728x90
반응형
댓글