Örneğin, Android'de yerel kodun bir kısmından uzun bir süre döndüren android.os.SystemClock.elapsedRealtime()
statik yöntemini çağırmam gerektiğini varsayalım. mylib.c
dosyasında, ben java MyClass.class
yılındaYerel bir koddan başka bir paketin statik bir java yöntemini çağırın
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);
}
var, diğerleri
static {System.loadLibrary("myLib");}
native long nativeMethod();
arasında var ama çağırdığınızda, aşağıdaki hatayı alıyorum:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
de mid
satırının beyanı. Bunun çok basit olduğunu düşünüyorum ama jni için yeniyim.
Birisi benim hatamı işaret edebilir mi?
Daha fazla ayrıntı için JNI tutorial numaralı telefona bir göz atın. Kendimi bir kaç dakika önce bulmuştum! Ancak, '(* env) -> FindClass (env, "android/os/SystemClock") 'gibi bir sınıfın adını belirtmem gerekiyordu. Teşekkürler! – Tom
Haklısınız. Yazım hatası/copy-paste hatasıydı :-) – jogabonito