안드로이드 앱 코틀린 오픈소스 개발 환경 에러 해결하기
제목이 너무 거창한가요? 최근 온라인으로 코틀린 강좌를 듣고 정말 오랜만에 '앱 공부 좀 해볼까?'라는 생각이 들어서 안드로이드 스튜디오를 세팅해 봤습니다. 안드로이드는 10년 전에 넥서스 one 사용하면서 공모전 준비할 때 잠깐 해보고는 처음인데 이클립스 플러그인으로 개발하던 때랑 완전히 다르군요. 안드로이드 스튜디오 툴도 낯설고 구조도 낯설고요.
일단 '소스 분석하면서 구조부터 파악해 볼까'라는 생각으로 검색해 보니 안드로이드 개발 스킬을 향상시키는 오픈소스 앱 20가지라는 제목의 좋은 글이 있더라고요. 여기서 Simple Calendar가 코틀린으로 되어 있다고 해서 세팅을 해 봤습니다. 그런데 앱을 실행했더니 아래와 같은 에러를 뿜어대네요.
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
이런 경우 제 해결 방법은 검색 검색 검색이죠. 여러 가지 원인이 있다는데 먼저 안드로이드 스튜디오에서 Build > Clean Project를 실행 후 Build > Rebuild Porject를 실행하면 된다고 하는데 Clean Project에서는 에러가 없었지만 Rebuild Projcet를 실행하니
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/squareup/leakcanary/watcher/R;
위와 같이 엄청난 에러를 뿜어댑니다. 그렇게 한참을 세팅을 바꿔가며 검색을 해서 LeakCanary의 버전 문제라는 걸 알아냈습니다. LeakCanary는 Square 회사가 개발한 Memory Leak을 알려주는 라이브러리라고 하는데 더 자세한 건 아래 참조 글을 확인해 보세요. 저도 공부를 많이 해야 할 것 같습니다.
ext {
leakCanaryVersion = '1.5.2'
}
어쨌든 위 문제는 build.gradle 파일에서 1.5.2로 되어 있는 부분을 1.5.1로 변경하여 해결했는데 아~ 괜히 시작했나 싶네요.
※ 참조
LeakCanary 1.5.2 and 1.6-Snapshot causing build failure
[번역] LeakCanary 의 구조를 어느정도 이해하고 싶은 사람