본문 바로가기
안드로이드

이런 UnsatisfiedLinkError 오류...

by Joseph.Lee 2015. 10. 12.

안드로이드 어플을 개발하던 중 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;
    }
}


저처럼 이걸로 몇시간동안 해매시지 않길...


반응형

댓글