For example, let's say that in Android, I need to call the static method android.os.SystemClock.elapsedRealtime()
, which returns a long, from a portion of native code. In the mylib.c
file, I have
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);
}
In the java MyClass.class
, I have among others
static {System.loadLibrary("myLib");}
native long nativeMethod();
but when I call it, I get the following error:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
at the declaration of mid
line. I think this is straightforward but I'm new to jni.
Can someone point out my mistake(s)?