일부 사용자 기기에서 ClassNotFoundException이 발생합니다

Flutter의 kakao_flutter_sdk 0.8.2 버전을 사용하여 개발한 Android 앱이 일부 사용자 기기에서 ClassNotFoundException이 발생하며 강제종료되는 현상이 지속적으로 보고되고 있습니다.

다음은 오류 내용입니다.

Fatal Exception: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.nutritioncourt.welcoach/com.kakao.sdk.auth.AuthCodeHandlerActivity}: java.lang.ClassNotFoundException: Didn't find class "com.kakao.sdk.auth.AuthCodeHandlerActivity" on path: DexPathList[[zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/base.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.arm64_v8a.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.en.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.ko.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.xxhdpi.apk"],nativeLibraryDirectories=[/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/lib/arm64, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/base.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.en.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.ko.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.xxhdpi.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3020)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3257)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:7050)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

Caused by java.lang.ClassNotFoundException: Didn't find class "com.kakao.sdk.auth.AuthCodeHandlerActivity" on path: DexPathList[[zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/base.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.arm64_v8a.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.en.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.ko.apk", zip file "/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.xxhdpi.apk"],nativeLibraryDirectories=[/data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/lib/arm64, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/base.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.en.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.ko.apk!/lib/arm64-v8a, /data/app/com.nutritioncourt.welcoach-EENH_yxYbQJy2iH82LOaPw==/split_config.xxhdpi.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
       at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
       at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java)
       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3008)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3257)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:7050)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

안녕하세요

첨부해주신 에러 로그를 확인해봤을 때, com.kakao.sdk.auth 패키지의 AuthCodeHandlerActivity 클래스를 찾는 것으로 보이는데요, kakao_flutter_sdk에서 사용하는 클래스는 com.kakao.sdk.flutter 패키지의 AuthCodeCustomTabsActivity 클래스입니다.

로그 상으로 확인했을 때는 AndroidManifest.xml 파일에 AuthCodeCustomTabsActivity를 등록하지 않으셨거나 잘못된 등록하신 것으로 보이는데요, 아래와 같이 com.kakao.sdk.flutter.AuthCodeCustomTabsActivity 로 등록하셔야 정상적으로 동작합니다.

확인 부탁드려요

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name">
    <application
      ...
      >
      ...
        <activity android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity">
          <intent-filter android:label="flutter_web_auth">
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <data android:scheme="kakao${your_native_app_key_here}" android:host="oauth"/>
          </intent-filter>
        </activity>
        ...
      </application>
</manifest>

동일한 내용이 등록되어 있는 것으로 보이는데, 혹시 Native App Key를 입력하는 부분에서 $가 실제 문자열에 들어가나요?
예) Native Key가 aaaaaaaa면 kakao$aaaaaaaa? kakaoaaaaaaaa? 어느 게 맞나요?
(현재 앱에는 kakao$aaaaaaaa의 형태로 들어가 있습니다)

추가로 확인해보니 com.kakao.sdk.auth 패키지의 AuthCodeHandlerActivity 클래스는 카카오가 개발하고 관리하는 것이 아닌 flutter_kakao_login 동작에 필요한 클래스인 것으로 파악됐습니다. 만약 flutter_kakao_login 을 사용하고 계신 것이라면 저희가 관리하는 프로젝트가 아니므로 도움드리기 어려운 점 양해 부탁드려요ㅠㅠ

kakao_flutter_sdk를 사용하시는 것이 맞다면 AndroidManifest.xml에 AuthCodeCustomTabsActivity를 등록해주시면 정상 동작할 것으로 보이고, 질문주신 Native App Key를 입력할 때는 앱 키가 123456이라면 kakao123456 으로 등록하셔야합니다.
( ‘${your_navtive_app_key_here}’ 부분이 실제 앱 키로 바뀌어야합니다)

이전에 flutter_kakao_login을 사용하다 문제가 발생하여 kakao_flutter_sdk로 이전한 상황이었는데, 이전에 사용하던 매니페스트 항목을 지우지 않은 것과 Native Key를 잘못된 형식으로 입력한 것이 모두 작용하여 발생한 문제였던 것으로 보이며, 적어주신 대응 방법들을 모두 적용하니 정상 작동하는 것을 확인하였습니다. 감사합니다~

2개의 좋아요