Ad esempio, diciamo che in Android, ho bisogno di chiamare il metodo statico android.os.SystemClock.elapsedRealtime()
, che restituisce un lungo, da una porzione di codice nativo. Nel file mylib.c
, hoChiama un metodo java statico di un altro pacchetto dal codice 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);
}
Nel java MyClass.class
, ho tra gli altri
static {System.loadLibrary("myLib");}
native long nativeMethod();
ma quando io lo chiamo, ottengo il seguente errore:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
a la dichiarazione della linea mid
. Penso che sia semplice ma sono nuovo di Jni.
Qualcuno può segnalare i miei errori?
L'avevo trovato anch'io pochi minuti fa! Tuttavia, ho dovuto specificare il nome della classe come '(* env) -> FindClass (env," android/os/SystemClock ")'. Grazie! – Tom
hai ragione. È stato un errore di battitura/copia-incolla :-) – jogabonito