Na przykład załóżmy, że w systemie Android muszę wywołać metodę statyczną android.os.SystemClock.elapsedRealtime()
, która zwraca długi, z części kodu natywnego. W pliku mylib.c
mamWywołanie statycznej metody języka Java innej paczki z kodu macierzystego
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);
}
W java MyClass.class
mam m.in.
static {System.loadLibrary("myLib");}
native long nativeMethod();
ale kiedy ja to nazywam, pojawia się następujący błąd:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
w deklaracja linii mid
. Myślę, że to jest proste, ale jestem nowy w jni.
Czy ktoś może wskazać mój błąd (y)?
Znalazłem to kilka minut temu! Jednak musiałem podać nazwę klasy "' (* env) -> FindClass (env, "android/os/SystemClock") '. Dzięki! – Tom
masz rację. To był błąd literowy/kopiuj-wklej :-) – jogabonito