Например, предположим, что в Android мне нужно вызвать статический метод android.os.SystemClock.elapsedRealtime()
, который возвращает long из части нативного кода. В файле mylib.c
у меня есть
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.
Может ли кто-нибудь указать на мою ошибку (ошибки)?