안녕하세요!


오늘은 제가 삽질했던 오류 해결법을 올려드리려고 합니다


ZipException은 Gradle에서 라이브러리를 추가할 때 가끔 발생하는 오류인데요


라이브러리 안에 같은 모듈이 중복되어 생기는 오류입니다.

보통 서드파티 라이브러리에서 구글 gms 등을 포함하여 충돌나는 경우가 많습니다.


다음과 같이 해결할 수 있습니다!


compile ('패키지 이름'){
exclude group: 'com.google.android.gms'
}


이렇게 하면 해당하는 패키지에 gms를 제외하고 컴파일되게 되어 충돌을 막을 수 있습니다.


하지만 저는 특수한 케이스에 부딪혔습니다!

기존 앱에 '파이어베이스'를 연동한 상태에서 '구글 플레이 게임' 을 연동하기 위해

BaseGameUtils를 모듈로 추가했었는데요


이때 zip exception com/google/android/gms/internal/z~~~.class 오류가 발생되어 고통을 받았었습니다.

이 해결법을 알려드리겠습니다!!


build.gradle(Module: BaseGameUtils) 에는 다음과 같이 선언되어있습니다.

if (!project.hasProperty('gms_library_version')) {
ext.gms_library_version = '8.4.0'
}
compile "com.google.android.gms:play-services-games:${gms_library_version}"
compile "com.google.android.gms:play-services-plus:${gms_library_version}"


제 build.gradle(Module: app) 에는 파이어베이스가 다음과 같이 선언되어 있었습니다.

compile 'com.google.firebase:firebase-core:10.0.1'
compile 'com.google.firebase:firebase-ads:10.0.1'


여기서 app의 파이어베이스에도 gms가 포함되어있었고, BaseGameUtils에도 gms가 포함되어 충돌이 일어났었는데요!

모듈이 달라 디버깅하기 쉽지 않았었습니다...

따라서 다음과 같이

compile "com.google.android.gms:play-services-games:10.0.1"
compile "com.google.android.gms:play-services-plus:10.0.1"

build.gradle(Module: BaseGameUtils) 의 버전을 맞춰주시면 아름답게 컴파일 되는 것을 확인할 수 있습니다!


저와 같은 고통을 받지 않으셨으면 좋겠습니다.


감사합니다!



+ Recent posts