예를 들어 Android에서 네이티브 코드의 일부에서 long을 반환하는 정적 메서드 android.os.SystemClock.elapsedRealtime()
을 호출해야한다고 가정 해 봅니다. mylib.c
파일에서, 내가 자바 MyClass.class
에서네이티브 코드에서 다른 패키지의 정적 Java 메서드 호출
JNIEXPORT jlong JNICALL
Java_com_mpackage_MyClass_nativeMethod(JNIEnv *env, jobject obj){
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetStaticMethodID(env, cls, "android.os.SystemClock.elapsedRealtime", "(V)J");
if (mid == 0)
return 0L;
return CallStaticLongMethod(cls, mid);
}
을 가지고, 내가 다른 사람
static {System.loadLibrary("myLib");}
native long nativeMethod();
을 사이에 있지만 내가 그것을 호출 할 때, 나는 다음과 같은 오류 얻을 :
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
에서을 mid
라인의 선언. 나는 이것이 간단하다고 생각하지만 저는 jni를 처음 사용합니다.
누군가 내 실수를 지적 할 수 있습니까?
나는 몇 분 전에 이것을 발견했습니다! 그러나'(* env) -> FindClass (env, "android/os/SystemClock")'와 같은 클래스 이름을 지정해야했습니다. 감사! – Tom
당신 말이 맞아요. 오타/복사하여 붙여 넣기 실수였습니다 :-) – jogabonito