shineware / KOMORAN

Korean Morphological Analyzer by shineware
Apache License 2.0
283 stars 63 forks source link

Android 에서 실행 시 ClassNotFound 오류 발생합니다. #149

Open j7soft opened 2 months ago

j7soft commented 2 months ago

문제 설명

_전에 3.3.4 버전으로 잘 실행되던 앱인데 3.3.9로 버전을 올리고 앱을 실행하는데 전에 안 나던 에러가 자꾸 납니다. 에러 로그는 아래와 같습니다. E/AndroidRuntime: FATAL EXCEPTION: main Process: com.inkosoft.popupbook, PID: 28299 java.lang.NoClassDefFoundError: Failed resolution of: Lkr/co/shineware/ds/aho_corasick/AhoCorasickDictionary; at kr.co.shineware.nlp.komoran.modeler.model.Observation.init(Observation.java:41) at kr.co.shineware.nlp.komoran.modeler.model.Observation.(Observation.java:37) at kr.co.shineware.nlp.komoran.core.model.Resources.init(Resources.java:67) at kr.co.shineware.nlp.komoran.core.Komoran.(Komoran.java:82) at com.inkosoft.popupbook.MainActivity.(MainActivity.java:315) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) at android.app.Instrumentation.newActivity(Instrumentation.java:1378) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4034) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8919) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) Caused by: java.lang.ClassNotFoundException: Didn't find class "kr.co.shineware.ds.aho_corasick.AhoCorasickDictionary" on path: DexPathList[[zip file "/data/app/jwz7PIZaaKtDy9JMcuR4pQ==/com.inkosoft.popupbook-LbgI8pj7LEZ_G8ghMKwy0w==/base.apk"],nativeLibraryDirectories=[/data/app/jwz7PIZaaKtDy9JMcuR4pQ==/com.inkosoft.popupbook-LbgI8pj7LEZ_G8ghMKwy0w==/lib/arm64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at kr.co.shineware.nlp.komoran.modeler.model.Observation.init(Observation.java:41)  at kr.co.shineware.nlp.komoran.modeler.model.Observation.(Observation.java:37)  at kr.co.shineware.nlp.komoran.core.model.Resources.init(Resources.java:67)  at kr.co.shineware.nlp.komoran.core.Komoran.(Komoran.java:82)  at com.inkosoft.popupbook.MainActivity.(MainActivity.java:315)  at java.lang.Class.newInstance(Native Method)  at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)  at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)  at android.app.Instrumentation.newActivity(Instrumentation.java:1378)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4034)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loopOnce(Looper.java:230)  at android.os.Looper.loop(Looper.java:319)  at android.app.ActivityThread.main(ActivityThread.java:8919)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 

재현 경로

어떻게 하면 동일한 문제가 계속 발생하나요? 개발환경이 안드로이드 스튜디오입니다. 에러는 라이브러리를 초기화 하는 부분에서 나는 것 같습니다. // KOMORAN 형태소분석기 모듈 import kr.co.shineware.nlp.komoran.constant.DEFAULT_MODEL; import kr.co.shineware.nlp.komoran.core.Komoran; import kr.co.shineware.nlp.komoran.model.KomoranResult; import kr.co.shineware.nlp.komoran.model.Token;

// 형태소 분석기 생성
Komoran komoran = new Komoran(DEFAULT_MODEL.LIGHT);

기대 상황

정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?

환경 정보

어떤 환경에서 이 문제가 발생하였나요?

추가 정보

스크린샷이나 에러 로그 등, 추가 정보가 있다면 남겨주세요. 위 에러 로그 참고하십시요.

gamamoe commented 2 months ago

@j7soft 리포트 감사합니다. 혹시 Gradle에서 KOMORAN 버전을 3.3.4로 변경하면 정상동작하나요? 간단한 HelloWorld App이지만 이전에 3.3.9로 설정된 프로젝트 실행 시 문제가 없었던 것을 확인했습니다 https://github.com/gamamoe/android-with-komoran 의존성 처리하는 과정에서 다른 문제가 있는 게 아닐까 싶기도 하네요