본문 바로가기

나의 플랫폼/안드로이드

[안드로이드] com.android.dex.DexIndexOverflowException

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드를 개발하다 보면, 많은 오픈 라이센스 라이브러리를 사용하게 됩니다.

문제점은 이 라이브러리에 기능적으로 문제가 없더라도 

Android Studio에서 빌드를 하게 되면 아래와 같은 에러가 뜨면서 빌드가 되지 않습니다.

com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536


이유는 구글에서 메소드 갯수에 제한을 두고 있기 때문에 

그 갯수를 넘으면 빌드가 되지 않습니다.


그래서 위와 같은 에러가 발생했을 때는 라이브러리를 줄일수 있을 만큼 줄이는게 해결 책입니다.


아마 가장 많이 발생하는 부분은 google service를 사용할 때 입니다.

build.gradle 파일에 google service를 추가할때 아래와 같이 많이들 넣습니다.


compile 'com.google.android.gms:play-services:7.3.0'


위와 같이 넣을 경우 google service에서 지원되는 모든 라이브러리가 들어갑니다.

map, wearable, gcm등등 사용하지 않는 라이브러리도 들어가게 되죠.

그 함수의 양이 얼마나 방대하겠습니까!


그래서 저걸 사용하는 라이브러리만 가져오도록 바꾸세요.

gcm을 사용한다면 아래와 같이 하는 겁니다.

compile 'com.google.android.gms:play-services-base:7.3.0'
compile 'com.google.android.gms:play-services-gcm:7.3.0'

그럼 다른 라이브러리는 포함되지 않기 때문에 함수의 수가 확 줄겠죠^^


그런다음 빌드를 해보면 문제 없이 빌드가 진행 될 것입니다.^^


구글 서비스 목록은 아래 사이트에서 참조하세요.

https://developers.google.com/android/guides/setup#split


참고 하세요.

참고 사이트 : http://stackoverflow.com/questions/30385873/google-play-services-finished-with-non-zero-exit-value-2