Android에서 음성인식 API JNI 에러 관련 문의 입니다

음성인식 API 실행시 JNI 에러가 발생하여 문의 드립니다.

초기화는 정상적으로 되었고 음성 인식하기(STT), 음성 합성하기(TTS) 모두 실행시 JNI 에러가 나오고 있습니다.
특이한 것이 제공되는 샘플 앱 기준으로 간단하게 테스트 앱을 만들어 확인했을 때는 이상없이 동작을 하는데
서비스 되고 있는 앱에 추가하였을 때 에러가 발생을 합니다.
참고로 이 앱은 proguard 가 적용되어 있습니다.

적용 버전은 아래와 같습니다.
implementation ‘com.kakao.sdk:newtone:6.1.4’

에러 메시지는 아래와 같습니다.

  1. 음성 합성하기(TTS)의 경우
    java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: JNI GetObjectField called with pending exception java.lang.NoSuchFieldError: no “Ljava/lang/String;” field “mHost” in class “Lcom/dialoid/speech/tts/TextToSpeech;” or its superclasses
    java_vm_ext.cc:570] at boolean com.dialoid.speech.tts.TextToSpeech.makeTTSDataJNI(android.content.pm.PackageInfo) (SourceFile:-2)
    java_vm_ext.cc:570] at boolean com.dialoid.speech.tts.TextToSpeech.n() (SourceFile:352)
    java_vm_ext.cc:570] at boolean com.kakao.sdk.newtoneapi.TextToSpeechClient.play() (SourceFile:338)
    java_vm_ext.cc:570] at boolean com.kakao.sdk.newtoneapi.TextToSpeechClient.play(java.lang.String) (SourceFile:355)

  2. 음성 인식하기(STT)의 경우
    java_vm_ext.cc:578] JNI DETECTED ERROR IN APPLICATION: JNI GetObjectField called with pending exception java.lang.NoSuchFieldError: no “Ljava/lang/String;” field “mHost” in class “Lcom/dialoid/speech/recognition/SpeechRecognizer;” or its superclasses
    java_vm_ext.cc:578] at boolean com.dialoid.speech.recognition.SpeechRecognizer.startListeningJNI(android.content.pm.PackageInfo) (SourceFile:-2)
    java_vm_ext.cc:578] at boolean com.dialoid.speech.recognition.SpeechRecognizer.A() (SourceFile:492)
    java_vm_ext.cc:578] at boolean com.kakao.sdk.newtoneapi.SpeechRecognizerClient.startRecording(boolean) (SourceFile:482)

테스트는 삼성폰과 엘지폰에서 하였습니다.

JNI 에러 관련하여 체크해야 할 부분이 있으면 답변 부탁 드립니다.
감사합니다.

자답 합니다.

proguard가 적용되어 발생하는 문제점으로 보입니다.
아래와 같이 proguard 예외 처리를 하니 문제점이 발생하지 않습니다.

-keep class com.kakao.** { *; }
-keep class com.dialoid.** { *; }

참고하세요

1개의 좋아요