출처: http://blog.goooood.net/299
google analytics v4를 사용하기 위해서 google play service를 update했더니
에러 메세지가 출력되면서 APK 빌드가 안되는 문제가 발생했다.
Unable to execute dex: method ID not in [0, 0xffff]: 65536
원인은 프로젝트에 여러개의 라이브러리가 포함 되어 있엇는데 최신버전의 google play service를 적용하면서
함수의 카운트 제한인 65536개를 넘어버린 것이다. 구글링을해보니 dex를 분할해서 해결하는 방법이 있었다.
dex를 분할방법은 아래 URL 참고
https://github.com/mmin18/Dex65536
하지만 사용하지 않았던 방법이라 불안해서 일단 패스~ 가급적 한개의 dex를 유지하기 위해서
사용된 메소드의 카운트와 추가될 라이브러리 메소드 카운트를 확인하기로 했다.
구글링해보니 리눅스의 cat명령어로 함수의 카운트를 확인 할 수 있었다.
정확한 의미는 잘 모르지만 파일의 특정 부분을 읽어서 출력하는 듯.. 암튼 결과는 맞는 것 같다.
아래 명령어에서 filename 부분에 dex파일명을 입력하면 된다.
cat filename | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'
APK파일에 사용된 메소드 카운트를 확인하려면 APK를 압축프로그램을 이용해서 압축을 풀면 classes.dex파일을 찾을 수 있다.
jar의 경우 dex파일로 변경해야하는데 아래 명령어를 참고하면 된다.
in.jar파일을 out.dex파일로 변경한다. dx --dex --output="out.dex" "c:\temp\in.jar"
dx는 Android SDK에 포함되어 있으며 내 PC에서는 android-sdk-windows\build-tools\21.1.2에서 찾을 수 있었다.
dex파일로 변환했다면 위에 언급했던 cat 명령어로 jar에 포함된 함수의 카운트를 알 수 있다.
함수카운트를 체크해보니 기존 APK에 포함되어있던 함수가 48699개 새로은 버전의 play store sevice의 함수는 20298개 였다.
google analytics v4를 지원하면서 함수 카운트제한을 넘지 않는 버전을 찾기 위해 다시 구글링했고
몇 개의 play store sevice 구버전 다운로드 링크를 찾을 수 있었다.
다행히 4323030 r16을 받아보니 google analytics v4를 지원하면서도 메소드 카운트가 14535개 였고
APK에 적용해도 더이상 빌드 에러가 발생하지 않았다.
play store sevice old version download link
- https://dl-ssl.google.com/android/repository/google_play_services_4132530_r14.zip
- https://dl-ssl.google.com/android/repository/google_play_services_4242030_r15.zip
- https://dl-ssl.google.com/android/repository/google_play_services_4323030_r16.zip
- https://dl-ssl.google.com/android/repository/google_play_services_5077000_r18.zip
- https://dl-ssl.google.com/android/repository/google_play_services_5089000_r19.zip
- https://dl-ssl.google.com/android/repository/google_play_services_6171000_r21.zip
참고 URL
- http://stackoverflow.com/questions/20982533/how-to-download-older-google-play-services
- http://google-play-services.en.uptodown.com/android/old
- http://stackoverflow.com/questions/8348144/how-to-convert-jar-or-class-to-dex-file
- http://stackoverflow.com/questions/14023397/is-there-a-way-to-get-count-of-number-methods-used-in-a-jar-file
'IT_Programming > Android_Java' 카테고리의 다른 글
Android Studio로 버전코드/버전네임 관리하기 (0) | 2015.06.23 |
---|---|
Multidex를 사용할 수 없는 Eclipse에서 JAR에 dex를 추가하여 메소드 65536개 오류 방지하기 (0) | 2015.06.23 |
[펌] 안드로이드 회전하는 뷰 만들기 (0) | 2015.06.08 |
JNI Local Reference Changes in ICS ( ICS 부터 바뀌는 JNI Local Reference ) (0) | 2015.06.05 |
Android property animation (0) | 2015.06.01 |