से दूसरे पैकेज के एक स्थिर जावा पद्धति को कॉल करें, मान लें कि एंड्रॉयड में, मैं स्थिर विधि android.os.SystemClock.elapsedRealtime()
, जो एक लंबे देता है, मूल कोड के एक हिस्से से कॉल करने की आवश्यकता हैं। 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);
}
जावा MyClass.class
में है, मैं दूसरों
static {System.loadLibrary("myLib");}
native long nativeMethod();
के बीच है, लेकिन जब मैं इसे कहते हैं, मैं निम्नलिखित त्रुटि मिलती है:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
पर mid
लाइन की घोषणा। मुझे लगता है कि यह सीधा है लेकिन मैं जेनी के लिए नया हूँ।
किसी ने मेरी गलती (रों) का कहना है सकते हैं?
के लिए JNI tutorial पर एक नजर डालें मैं इस अपने आप को कुछ मिनट पहले मिल गया था! हालांकि, मुझे '(* env) -> FindClass (env, "android/os/SystemClock") जैसे वर्ग के लिए नाम निर्दिष्ट करना था। धन्यवाद! – Tom
आप सही हैं। यह एक टाइपो/कॉपी-पेस्ट गलती थी :-) – jogabonito