Ví dụ: giả sử trong Android, tôi cần gọi phương thức tĩnh android.os.SystemClock.elapsedRealtime()
, trả về một khoảng thời gian dài, từ một phần mã gốc. Trong tập tin mylib.c
, tôi cóGọi phương thức java tĩnh của gói khác từ mã gố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);
}
trong java MyClass.class
, tôi có những người khác
static {System.loadLibrary("myLib");}
native long nativeMethod();
nhưng khi tôi gọi nó, tôi nhận được lỗi sau:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
tại tuyên bố của mid
dòng. Tôi nghĩ rằng điều này là đơn giản nhưng tôi mới với jni.
Ai đó có thể chỉ ra (các) lỗi của tôi không?
Tôi đã tự tìm thấy điều này một vài phút trước! Tuy nhiên, tôi phải chỉ định tên cho lớp như '(* env) -> FindClass (env," android/os/SystemClock ")'. Cảm ơn! – Tom
bạn nói đúng. Đó là lỗi đánh máy/sao chép-dán :-) – jogabonito