2014-11-24 3 views
0

안녕하세요. Android 기본 애플리케이션에서 작업 중입니다.Android '.so.1'파일을로드 할 수 없습니다.

일부 'xyz.so.1'파일에 의존하는 'abc.so'파일이 있습니다. 필요한 모든 파일은 빌드하기 전에 프로젝트 구조에서 사용할 수 있지만 '.so.1'은 생성 된 .apk 파일의 일부가 아닙니다 (압축을 풀어 apk 파일을 검사했습니다).

응용 프로그램을 실행하려고하면 "java.lang.UnsatisfiedLinkError '에서 로더 dalvik에서'abc.so.1 '을로드 할 수 없습니다.

전화가 루트가 아니며 프로덕션 빌드에서 실행되므로 .so.1 파일을 푸시하지 않습니다. .so.1 파일을 APK의 일부로 포함하려면 어떻게해야합니까?

감사합니다.

답변

1

JNI를 통해 Java에 원시 라이브러리를로드한다는 개념이 없다고 생각합니다.

처음에 자바에서 네이티브 메소드를 정의하고 네이티브에서 해당 구현을 수행하고 이름 지정 규칙에 따라 네이티브 메소드를 등록해야합니다. 2) jni_onload에서 네이티브 메소드를 등록합니다. 난 당신이 체크를하지 않았 으면해야한다고 생각합니다 http://www.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html)

다음, 네이티브로 전화를하기 전에 라이브러리를로드해야합니다. 이것은 한 번해야합니다. 당신은 정의하여 활동을 수행 할 수 있습니다

정적 {

System.loadLibrary를 ("mylib.so");

} 당신이 libXYZ.so로 라이브러리 이름을 가지고있다 할 라이브러리를 컴파일하는 동안,하지만 자바 라이브러리를로드 할 때

참고 "LIB"생략한다, 단지 System.loadLibrary를 (XYZ.so) NDK를 사용하는 경우 라이브러리가 이미 Java 프로젝트> libs> armeabi 폴더에 복사되었으므로 lib.so를 복사하지 않아도됩니다.

이제 공유 라이브러리가 여러 개인 경우 종속 lib.so 먼저, 다음에 두 번째 등 예 :

정적 {

System.loadLibrary (independent_lib.so); // 안드로이드 라이브러리에만 의존해야합니다 System.loadLibrary (next_dependent_lib1.so); // 안드로이드 라이브러리 및 independent_lib.so에 의존 할 수 있습니다. System.loadLibrary (next_dependent_lib2.so); //이 ..... .... .. 당신이 뒤범벅 경우

}

것은 VM이 할 수 없습니다를 independent_lib.so, 안드로이드 libs가에 따라, next_dependent_lib1.so 수 있습니다 라이브러리를 링크하고 충족되지 않은 링크 오류가 발생합니다.

마지막으로, 모든이 .so는 apk의 일부가되며 런타임에만 시스템 라이브러리에 푸시됩니다. 뿌리깊은 전화기가 아니라면 .so를 추출 할 수 없습니다. 위의 방법을 따르면 시스템에 .so를 넣을 필요가 없습니다.만 일식/Cygwin에서 구축하고이 도움이

희망,

감사합니다, Shrish

을 실행