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

armeabi 폴더가 두개 so파일이 두개 ?

0 추천

외부라이브러리를 붙이고 build_native.sh를 통해 so파일을 만들었습니다. Android ->libs->armeabi 안에 말이죠 ...

그런데  

 

 FATAL EXCEPTION: main
 java.lang.ExceptionInInitializerError
at java.lang.Class.newInstanceImpl(Native Method)
  at java.lang.Class.newInstance(Class.java:1319)
  at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1876)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
at android.app.ActivityThread.access$600(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1152)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4449)
  at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load cocosdenshion: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
 
이런 에러로그가나타나네요 ... 어디선가 본걸론  so파일을 제대로된 위치에 생성하지않아서 그렇다고하길래 
libs->armeabi.안을확인햇는데 방금 만들어진 so파일이분명히있거든여  그런데  armeabi폴더가 하나더있었네요
obj->local->armeabi폴더가 있고 그안에 so파일들도있던데... libs쪽에있는폴더에도 있는 so파일이있었어요 
그런데 생성일을 보니 방금 만들어진게아니고 좀 지난파일이더라구요.  
 
양 쪽폴더에있는 libcocosdenshion.so파일이 서로 다른파일이네요.  
 
서로다른경로에있는 so파일들때문에 저런 에러로그가 나타나는것일까요 ?  머리가 아프네요 ㅠㅠ 
안드로이드로이으잉 (1,560 포인트) 님이 2013년 8월 30일 질문

1개의 답변

+1 추천
 
채택된 답변

두개 생기는게 정상입니다. 

빌드시 obj->local->armeabi  에 debug를 위한  symbol table이 들어있는 so를 먼저 생성한 후 symbol을 strip 해서 libs->armeabi 에 넣습니다. SO 가 로드가 안되는 이유는 다른 이유일 겁니다.

보통은 참조한 so가 있다면 그 so 가 변경 되어서 그럴 수 있고 아니라면 JNI 매핑 문제일 수 있습니다.

정확한 원인은 FATAL 에러 위에 있는 로그를 추가로 올려주셔야 판단이 가능할 듯 합니다.

사악미소 (65,330 포인트) 님이 2013년 8월 30일 답변
안드로이드로이으잉님이 2013년 9월 2일 채택됨
답변감사드려요!

08-30 17:05:19.779: W/dalvikvm(17857): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baby/pangpang/g/PopUlar;
08-30 17:05:19.779: W/dalvikvm(17857): Class init failed in newInstance call (Lcom/baby/pangpang/g/PopUlar;)
08-30 17:05:19.779: W/dalvikvm(17857): threadid=1: thread exiting with uncaught exception (group=0x40d001f8)

FATAL위의 로그입니다...  
 

빌드시 local쪽에 so파일이 먼저 생성되고 libs에 so가 생긴다면,  양쪽의 so파일의 생성시간이 같아야하는것이지요 ? 저는 지금 생성시간이 서로 차이가 크니까 이거
문제가있는것이겠네요 ...ㅠㅠ
주신 로그만으로는 구분이 안가네요..=ㅇ=;; 더 위에 데이터는 없나요?
아무튼 시간이 많이 차이가 난다면 문제가 있습니다.
obj 폴더, libs 폴더를 삭제한 후 다시 빌드 해서 libcocosdenshion.so 가 둘다 생성되는지 부터 확인해보셔야 할 듯 합니다.
둘다 삭제하고 해봐도 새로 잘 만들어지는군요...에러로그는 저게 전부입니다. ㅠㅠ
앱을 시작하자마자 뻗어버리니까  더 나올것이 없네요 ㅠㅠ
so파일들은 삭제했다가 build_native.sh로 다시 만들었습니다.  하하 근데 왜 안되지 ㅠㅠㅠ 아 답답하다 ㅠㅠ
NDK에 있는 so 가 아닌 라이브러리가 있다면, 그 쪽 링크 문제이거나. jni 함수 매핑 문제일 겁니다. 두 군데를 살펴보세요. 소스를 보여 주실 수 있다면 메일로 보내주시시면 확인 해 보도록 하겠습니다.
지금 외부 라이브러리를 추가시켜서 작업중입니다.
음 ... 메일주소를 알려주시면 제가 jni함수 부분을 보내드릴게요 .
JNI부분을 더 유심히 살펴봐야겠네요
...