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

버전 차이때문에 실행 에러가 나는것 같은데 감이 안잡힙니다.

0 추천
안드로이드 개발 경험이 길지 않아서 제목이 좀 뜬금 없습니다만

현재 pjsip를 이용해서 안드로이드 어플리케이션을 만들고 있는데요.

적용할 장비가 한동안 나오지 않아서 제 휴대폰인 5.0기준으로 거의 대부분을 작성하게 되었습니다.

5.0 스마트폰에서는 소스가 스파게티를 연상할 정도로 엉망이긴 하여도 정상적으로 동작을 하는데

4.4에서는 동작을 못하고 있습니다.

에러 내용은 아래와 같습니다.

------------------------------------------------------------------------------------------------------

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: org.pjsip.pjsua2.app, PID: 2084
                  java.lang.UnsatisfiedLinkError: Native method not found: org.pjsip.pjsua2.pjsua2JNI.swig_module_init:()V
                      at org.pjsip.pjsua2.pjsua2JNI.swig_module_init(Native Method)
                      at org.pjsip.pjsua2.pjsua2JNI.<clinit>(pjsua2JNI.java:2435)
                      at org.pjsip.pjsua2.Endpoint.<init>(Endpoint.java:0)
                      at org.pjsip.pjsua2.app.MainActivity.<clinit>(MainActivity.java:285)
                      at java.lang.Class.newInstanceImpl(Native Method)
                      at java.lang.Class.newInstance(Class.java:1208)
                      at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
                      at android.app.ActivityThread.access$800(ActivityThread.java:135)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:136)
                      at android.app.ActivityThread.main(ActivityThread.java:5001)
                      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:801)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)
                      at dalvik.system.NativeStart.main(Native Method)

------------------------------------------------------------------------------------------------------

jni하고 관련이 있는 에러임은 확실한데 인터넷에서  유사 문제를 검색을 해도 뾰족한 답이 안나와서 결국 이렇게 질문을 남깁니다. 안드로이드 개발 경험이 있긴 있어도 길지않은데다가 jni와 ndk는 이번에 처음 건드는지라 책을 봐도 에러에 대해서 감이 안잡힙니다. 조금 문제 해결에 도움을 주실수 있다면 정말 감사하겠습니다.

추가: 혹시나 해서 작업 환경도 같이 적습니다. 가상머신으로 우분투 15.10에서 안드로이드 스튜디오를 돌리고 있으며

빌드툴버전은 19.1.0(23.0.3도 돌려봣으나 돌려야 할 환경인 4.4.4에서 동작은 여전히 안합니다.)입니다.

보드는 RK3188칩을 기반으로 하는 보드입니다.
th1969 (150 포인트) 님이 2017년 1월 15일 질문
th1969님이 2017년 1월 15일 수정

2개의 답변

0 추천
 
채택된 답변

NDK의 경우 so를 System.loadLibrary를 통해 로드한 후 사용하는데, 이 SO에 있는 심볼이 없거나 다를 경우 SO 자체를 로드 못 하며, 이 때 말씀 해 주신 로그가 발생합니다.

 

예를 들어 libmediandk.so 의 경우 롤리팝 이상의 단말 부터 지원하는 NDK 라이브러리로,

롤리팝 이상의 단말에서는 -lmediandk 옵션을 통해 링크해서 사용하나, 킷캣이하 단말에서는 이 라이브러리 자체가 없어서, 사용이 불가능합니다.

 

테스트하신 프로젝트에서 사용하는 라이브러리가 뭔지는 모르겠으나, 

실제 동작 시켜야하는 킷캣 단말에서는 심볼이 없는 듯 하니, arm-linux-androideabi-gcc-nm  를 사용하여, 빠진 심볼을 찾아 직접 빌드하거나 다른 라이브러리를 사용하도록 변경해주셔야 할 듯 합니다. 

익명사용자 님이 2017년 1월 16일 답변
th1969님이 2017년 1월 19일 채택됨
답변 감사합니다^^;
일단 제가 쓰고 있는 NDK버전의 r13b에서 r9d로 낮춘후에 다시 재작업하니 동작하는걸 확인하였습니다.
0 추천

 java.lang.UnsatisfiedLinkError: Native method not found 인거보니 swig_module_init() 에 무슨 문제가 있는게 아닐까 싶습니다. 

쎄미 (162,410 포인트) 님이 2017년 1월 16일 답변
답변 감사합니다^^;
일단 제가 쓰고 있는 NDK버전의 r13b에서 r9d로 낮춘후에 다시 재작업하니 동작하는걸 확인하였습니다.
...