9
例如,假設在Android中,我需要調用靜態方法android.os.SystemClock.elapsedRealtime()
,該方法從本機代碼的一部分返回一個long。在mylib.c
文件,我有從本機代碼調用另一個包的靜態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);
}
在Java MyClass.class
,我等
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