たとえば、Androidでは、静的メソッドandroid.os.SystemClock.elapsedRealtime()
を呼び出す必要があります。これは、ネイティブコードの一部から長いコードを返します。 mylib.c
ファイルでは、私はJavaのMyClass.class
でネイティブコードから別のパッケージの静的Javaメソッドを呼び出す
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);
}
を持って、私は他の人
static {System.loadLibrary("myLib");}
native long nativeMethod();
の間で持っていますが、私はそれを呼び出すときに、私は次のエラーを取得する:で
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
mid
行の宣言。私はこれが簡単だと思うが、私はjniには新しかった。
誰かが私の間違いを指摘できますか?
私は数分前にこれを見つけました!しかし、 '(* env) - > FindClass(env、" android/os/SystemClock ")'のようにクラスの名前を指定しなければなりませんでした。ありがとう! – Tom
あなたは正しいです。それはtypo/copy-pasteの間違いでした:-) – jogabonito