안드로이드 스튜디오에서 ".so"(공유 라이브러리) 안에 "callMethod()"메소드를 사용하는 데 도움이 필요합니다.안드로이드 스튜디오에서 .so 공유 라이브러리 안의 메소드 호출하기
내 안드로이드 스튜디오 버전은 내가 "SRC/메인 /" 가 그럼 난 jniLibs 폴더 안에 세 개의 폴더를 생성에 jniLibs 폴더를 생성 2.1.3
입니다 : (armeabi, armeabi-V7A, 86) 는 그럼 난 퍼트 언급 된 모든 폴더 안에있는 .so 라이브러리. 내가 무엇을해야 모르는 그 후
static {
System.loadLibrary("SharedLibAndroid");
}
:이 쓴 MainAcrivity 자바 클래스에서
compile fileTree(dir: 'libs', include: ['*.jar','.so'])
을 : 그 후, 나는 다음과 같이 build.gradle 업데이트?
어떻게해야합니까? callMethod() 메소드를 .so 라이브러리에서 호출하려면 어떻게해야합니까?
나는 많은 것을 수색했으나, 나는 그것을 어떻게하는지 완전한 모범을 보지 못했다.
고맙습니다.
My Update
나는 아래처럼 내 프로젝트의 새로운 클래스와 네이티브 메소드에 추가 한 :
@SuppressWarnings("JniMissingFunction")
public class Test1Cpp {
static {
System.loadLibrary("Cpp");
}
public native String callMethod();
}
가 그럼 난 .so를 공유 라이브러리 내부의 메소드를 호출 할 수 있습니다, 내가 또 다른 문제에 직면
, 내 .so 라이브러리가 모든 플랫폼 모바일에서 작동하지 않음오류는 다음과 같습니다.
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.mysecondtestapp-1/lib/arm/libCpp.so" has unexpected e_machine: 3
그럼 내 질문 : 모든 .so 라이브러리를 모든 플랫폼 모바일에서 작동하도록 변환하는 방법은 무엇입니까?
답장을 보내 주셔서 감사합니다 yakobom,하지만 귀하의 예제에서 공유 라이브러리를로드하고 사용하는 방법을 보지 못했습니다. 한편, 안드로이드 스튜디오에서 공유 라이브러리를 링크하고 사용하는 방법에 대한 세부 정보가 필요합니다. –
내가 말했듯이, 당신이 로딩 오류를 나타내지 않았기 때문에, 당신은 로딩에 아무런 문제가 없다고 생각했습니다. 어쨌든 - 내가 준 링크는 당신이해야 할 모든 것을 안내하지만, 작업 예제를보고 싶다면 소스 코드를 보아라. (내 대답을 업데이트했다) – yakobom
후속 작업을 위해 @yakobom에게 많은 감사를 보낸다. hello-jni 샘플과 static {System.loadLibrary ("hello-jni"); }하지만 생성 된 공유 라이브러리 (.so)가 보이지 않았습니다. .c 파일을 삭제하면 프로젝트가 실행되지 않고 오류가 발생했습니다. java.lang.UnsatisfiedLinkError : 구현이 없습니다. java.lang.String com.example.hellojni.HelloJni.stringFromJNI는() 그래서, 그것은 아마 .so를 라이브러리 –