안드로이드 어플을 개발하던 중 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 |
---|
동일한 문제로 고민이였는데 정말 감사합니다.
한가지 궁금한게 있는데요.
System.loadLibrary()에서 호출되던 부분을 어디서 어떻게 호출하게 수정하신건가요?
public class TestX {
....
....
static {
System.loadLibrary("test_proc");
}
}
이런식의 class에서 shared lib을 호출하게 하는데 LoadLibrary() 함수를 static block안에 넣어도 되나요?
답글