안드로이드 어플을 개발하던 중 UnsatisfiedLinkError 이란 오류를 만나 몇시간동안 해맸네요...ㅠㅠ
System.loadLibrary("Custom"); 에서 문제가 생긴건데
이게 또 이상하게 갤럭시노트2 (4.4.2) 에서는 잘 되는데 갤럭시S2 (4.1.2) 에서는 이런 문제가 발생하는 겁니다...
분명히 apk 파일 안의
/lib/armeabi/libCustom.so 도 존재하고
혹시 몰라 armeabi-v7a 으로도 컴파일해서
/lib/armeabi-v7a/libCustom.so 으로도 넣어봤습니다.
어떤 분은 native library내부에 오류가 있어도 이런 문제가 발생한다고 하고...
JNI_OnLoad 자체도 집입하지 못하구...
D/dalvikvm﹕ Trying to load lib /data/data/package.path/lib/libCustom.so 0xXXXXXXXX W/dalvikvm﹕ Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lpackage/path/CustomClass; D/AndroidRuntime﹕ Shutting down VM W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x415f22a0) E/AndroidRuntime﹕ FATAL EXCEPTION: main |
그런데 계속 찾다보니 Facebook이나 Chrome같은 앱에서도 이런 문제를 피해갈 수 없어 예외처리를 한다고 합니다.
아무래도 이전 버전의 안드로이드에서는 /lib/ 내의 라이브러리를 참조하지 못하는거 같습니다.
그래서 저는 이렇게 함수를 만들어 사용하고 있습니다...
public static boolean LoadLibrary(Context context, String libraryname) { StringBuilder strblibpath = new StringBuilder(128); File f; String strlibpath; strblibpath.append("/data/data/"); strblibpath.append(context.getPackageName()); strblibpath.append("/lib/lib"); strblibpath.append(libraryname); strblibpath.append(".so"); strlibpath = strblibpath.toString(); f = new File(strlibpath); if(f.exists()) { try{ System.load(strlibpath); return true; }catch(java.lang.UnsatisfiedLinkError ex){ ex.printStackTrace(); return false; } }else{ return false; } } |
저처럼 이걸로 몇시간동안 해매시지 않길...
반응형
댓글