티스토리 뷰

안드로이드는 기본적으로 달빅을 이용하기 때문에 메소드의 단일 파일당 64k를 넘을수 없습니다.


그냥 보면 메세지들은 다음과 비슷합니다.


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


해결 방법은 다음과 같습니다.


1. 쓸데 없는 라이브러리를 사용하지 맙시다.


우리는 개발을 하는것이지 라이브러리 가져다가 이리저리 합치는 사람이 아닙니다.

코더가 되지 말고 웬만한건 만들어 사용합시다.


이것과 관련하여서 예전에 googleplay-service가 너희가 무엇을 원하는지 알수가 없어서 모든것을 넣어서 만들어줄게 버전인 all 버전으로 출시했다가 개발자들이 이 라이브러리에서 쓰지 않는것들을 빼는 아주 획기적인 일이 있은 후로부터는 쪼개서 내주었죠...


카카오도 이래서 변경하기는 했는데... 그래도 큰거 같은... 반성 좀 합시다.

페이스북도 마찬가지...

그리고 솔찍히 Oauth 정도는 개발할수 있으니 한번 만들어보는것도 좋아요.


2. 프로가드를 하여 봅니다.


이 부분은 적지 말까 하다가 적는 부분입니다.

최종적으로 모든 분들이 요즘은 프로가드를 하기 때문에 안적으려고 하였는데,

프로가드 설정중에 사용하지 않는 메소드들은 없애버리는 옵션이 있으니 이용하시는것도 좋습니다.


3. 구글이 시키는대로 해봅시다. multidex... OMG..


https://developer.android.com/studio/build/multidex?hl=ko


아마 솔찍히 이야기하자면 구글도 이렇게 메소드가 넘칠지는 상상을 안했을것 같습니다.


이번에 빌게이츠가 컴퓨터 메모리 발언했을때 처럼요...


build.gradle (Module: app) 의 android 하위의 compileSdkVersion을 21 이상으로 만들어줍니다.

(웬만하면 이 부분은 최신으로 맞추는게 좋습니다.)


multiDexEnabled를 true로 변경하여 줍니다.


dexOptions에 다음값을 추가하여 줍니다.


jumboMode true

javaMaxHeapSize "4g"


물론... 위의 MaxHeapSize옵션은 빌드하는데 메모리가 부족할때 넣는 옵션이므로 멀티덱스를 할때가 아니더라도 넣어도 됩니다.


저는 기본적으로 넣습니다. 지금은..


dependencies에 다음을 추가합니다.


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


gradle 업그레이드로 인하여 warning이 발생한다면, 다음과 같이 수정합니다. gradle 버전이 정확하게 기억이 안나네요 ㅎㅎ


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


manifest파일의 application의 class를 지정합니다. name으로요.


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


4. 잘돌아가면 좋고. 안되면 댓글을 남깁니다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함