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