Por ejemplo, digamos que en Android, necesito llamar al método estático android.os.SystemClock.elapsedRealtime()
, que devuelve un largo, de una porción de código nativo. En el archivo mylib.c
, tengoLlamar a un método java estático de otro paquete desde el código nativo
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);
}
en el java MyClass.class
, tengo entre otros
static {System.loadLibrary("myLib");}
native long nativeMethod();
pero cuando lo llamo, me sale el siguiente error:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
en la declaración de la línea mid
. Creo que esto es sencillo, pero soy nuevo en jni.
¿Alguien puede señalar mi error (s)?
¡Lo encontré hace unos minutos! Sin embargo, tuve que especificar el nombre de la clase como '(* env) -> FindClass (env," android/os/SystemClock ")'. ¡Gracias! – Tom
tienes razón. Fue un error tipográfico/copiar y pegar :-) – jogabonito