지돌이의 블로그 입니다!

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


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


'안드로이드' 카테고리의 다른 글

이런 UnsatisfiedLinkError 오류...  (1) 2015.10.12

Comment +1

  • 초보유저 2017.03.14 10:41

    동일한 문제로 고민이였는데 정말 감사합니다.
    한가지 궁금한게 있는데요.
    System.loadLibrary()에서 호출되던 부분을 어디서 어떻게 호출하게 수정하신건가요?

    public class TestX {
    ....
    ....
    static {
    System.loadLibrary("test_proc");
    }
    }

    이런식의 class에서 shared lib을 호출하게 하는데 LoadLibrary() 함수를 static block안에 넣어도 되나요?