카카오 sdk 포함 바이너리 문제

카카오 SDK 넣고 빌드한 바이너리 실행 시 약 50% 확률로 아래와 같은 exception이 발생합니다.

java.lang.NoClassDefFoundError: my.project.test.KakaoSDKAdapter$2
        at my.project.test.KakaoSDKAdapter.getApplicationConfig(KakaoSDKAdapter.java:50)
        at com.kakao.auth.KakaoSDK.init(KakaoSDK.java:44)
        at my.project.test.TestApplication.onCreate(TestApplication.java:42)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4428)
        at android.app.ActivityThread.access$1500(ActivityThread.java:142)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1263)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5116)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
        at dalvik.system.NativeStart.main(Native Method)

my.project.test.KakaoSDKAdapter.getApplicationConfig(KakaoSDKAdapter.java:50) 부분의 코드는
IApplicationConfig 를 new 로 생성해 주는 부분입니다.

이 문제가 발생했을 때 프로젝트 clean → build → run 하면 어쩔땐 실행 되고,
어쩔땐 같은 문제 발생하고 그렇네요…

Android studio 에서 개발하고 있고,

project build.gradle :
subprojects {
repositories {
mavenCentral()
maven { url ‘http://devrepo.kakao.com:8088/nexus/content/groups/public/’ }
}
}

app build.gradle :
compile group: ‘com.kakao.sdk’, name: ‘kakaotalk’, version: ‘1.1.4’
compile group: ‘com.kakao.sdk’, name: ‘kakaolink’, version: ‘1.1.4’

이와 같이 kakao 관련 라이브러리 포함해서 사용중입니다.

KakaoSDKAdapter 라는놈은 직접 생성하신 클래스인것 같은데요? 요게 왜 빠졌는지는 해당 프로젝트 설정으로 인한 원인으로 보이는데 소스가 없어 저도 어디가 문제인지는 잘 모르겠네요.

kakao library 또는 google plus server 둘 중 하나만 빼줘도 잘 동작하는걸로 봐서
google plus service 랑 뭔가 궁합이 안맞나 보네요.

gradle base라면 알아서 merge를 할텐데요. 다른 group의 service를 사용하고 잇는건 아닌지 확인이 필요하겠네요~

위의 dependency를 보면 kakaosdk에서는 google play service를 사용하는 module이 없는데 충돌이 나는게 이상하네요.

저도 같은 문제가 발생하고 있습니다.

MultiDexApplication 해당 클래스로 하고있는데 유독 저기 부분만 에러가 발생하네요.

그냥 엔터 몇번 쳐주고 다시 빌드해서 하면 근데 또 됩니다.

이상한 문제네요…

gradle에 추가된 google play service의 group과 name이 동일하면 버전이 달라도 자동 merge해 줍니다. 그렇지 않은경우는 group과 name이 다르지 않을까요?? 그리고 혹시라도 계속 문제가 발생한다면 둘중 최신을 포함시키고 버전이 낮은놈은 exclude시켜도 될것 같네요.

아 그리고 최신버전을 사용하면 좀더 경량화 될꺼에요 ㅎ