마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

System.loadLibrary("srec_jni"); 에 대해서

0 추천

제가 내장 음성인식 뉘앙스 엔진을 사용해 보려고 합니다, 그런데 System.loadLibrary("srec_jni"); 여기에서 에러가나내요

라이브러리를 못 읽는다고 하는데  제가 알고 있기론 srec_jni 이 라이브러리는 시스템 내장 라이브러리로 알고있는데 

혹시 해결방법을 알고 계신분이 있을까요?

08-06 09:15:48.870: E/AndroidRuntime(25108): FATAL EXCEPTION: main
08-06 09:15:48.870: E/AndroidRuntime(25108): java.lang.ExceptionInInitializerError
08-06 09:15:48.870: E/AndroidRuntime(25108): at com.example.zxzx.NuanceSREC.test(NuanceSREC.java:58)
08-06 09:15:48.870: E/AndroidRuntime(25108): at com.example.zxzx.NuanceSREC.onClick(NuanceSREC.java:46)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.view.View.performClick(View.java:4261)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.view.View$PerformClick.run(View.java:17414)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.os.Handler.handleCallback(Handler.java:615)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.os.Looper.loop(Looper.java:137)
08-06 09:15:48.870: E/AndroidRuntime(25108): at android.app.ActivityThread.main(ActivityThread.java:4921)
08-06 09:15:48.870: E/AndroidRuntime(25108): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 09:15:48.870: E/AndroidRuntime(25108): at java.lang.reflect.Method.invoke(Method.java:511)
08-06 09:15:48.870: E/AndroidRuntime(25108): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
08-06 09:15:48.870: E/AndroidRuntime(25108): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
08-06 09:15:48.870: E/AndroidRuntime(25108): at dalvik.system.NativeStart.main(Native Method)
08-06 09:15:48.870: E/AndroidRuntime(25108): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load srec_jni: findLibrary returned null
08-06 09:15:48.870: E/AndroidRuntime(25108): at java.lang.Runtime.loadLibrary(Runtime.java:365)
08-06 09:15:48.870: E/AndroidRuntime(25108): at java.lang.System.loadLibrary(System.java:535)
08-06 09:15:48.870: E/AndroidRuntime(25108): at com.example.zxzx.MicrophoneInputStream.<clinit>(MicrophoneInputStream.java:32)
08-06 09:15:48.870: E/AndroidRuntime(25108): ... 13 more
 
구운란 (540 포인트) 님이 2013년 8월 6일 질문

1개의 답변

0 추천

jni 로 suffix 가 붙은 녀석은 framework 종속되어 있는 녀석입니다. 주로 기능을 호출하는 interface 의 역활만 할 뿐이구요

이는 java class 와 1:1 match 되어 있습니다. 고로 불러 들인다고 해도 사용할 수 없습니다.  정 사용을 해야 한다면 

project/jni 폴더내에 srec 를 참조한 뒤 srec_jni 를 비슷하게 만들어야 하는 방법 밖에 없을 듯 합니다.

https://android.googlesource.com/platform/external/srec/+/android-4.3_r2

 

그리고 해당 lib 은 /system/lib 내에 존재 하는 것 입니다.  system.loadlibrary 로는 호출 불가능 합니다. 특정 위치에 lib 을 호출하려면 system.load 를 쓰세요

http://stackoverflow.com/questions/4941700/how-to-load-so-file-that-are-not-in-system-lib-folder-in-android

 

aucd29 (218,390 포인트) 님이 2013년 8월 6일 답변
네 답변 감사합니다,
aucd29님은 라이브러리를 비슷하게 새로 만들어서 넣어야한다는 말씀이신가요? 그리고
https://github.com/CyanogenMod/android_frameworks_base/tree/jellybean/core/java/android/speech/srec
여기에 보시면 뉘앙스 소스가 있는데 다 system.loadlibrary로 라이브러리를 불러 내는데,,,,   
http://dumpcookie.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%82%B4%EC%9E%A5-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D%EC%97%94%EC%A7%84-Nuance-SREC
이사이트를 보고 했어요.
...