Tom*_*Tom 10 java java-native-interface static android android-ndk
例如,假设在Android中,我需要android.os.SystemClock.elapsedRealtime()从本机代码的一部分调用静态方法,该方法返回一个long.在mylib.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);
}
Run Code Online (Sandbox Code Playgroud)
在java中MyClass.class,我有其他
static {System.loadLibrary("myLib");}
native long nativeMethod();
Run Code Online (Sandbox Code Playgroud)
但是当我调用它时,我收到以下错误:
ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
Run Code Online (Sandbox Code Playgroud)
mid在线的声明.我认为这很简单,但我是jni的新手.
有人可以指出我的错误吗?
看起来您对JNI API的使用不合适.首先你应该得到类的引用android.os.SystemClock.obj作为参数传递,是一个对象MyClass.您应该使用(*env)->FindClass(env, "android/os/SystemClock")获取SystemClock的jclass.然后调用(*env)->GetStaticMethodID(env, cls,"elapsedRealtime", "(V)J");以获取方法ID.请查看JNI教程以获取更多详细信息
| 归档时间: |
|
| 查看次数: |
10782 次 |
| 最近记录: |