Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从本机代码调用另一个包的静态java方法_Java_Android_Static_Java Native Interface_Android Ndk - Fatal编程技术网

从本机代码调用另一个包的静态java方法

从本机代码调用另一个包的静态java方法,java,android,static,java-native-interface,android-ndk,Java,Android,Static,Java Native Interface,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); jmeth

例如,假设在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);
}
在java
MyClass.class
中,我有

static {System.loadLibrary("myLib");}
native long nativeMethod();
但是当我调用它时,我得到以下错误:

ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError:
android.os.SystemClock.elapsedRealtime()
mid
行的声明处。我认为这很简单,但我对jni还是新手


有人能指出我的错误吗

看起来您对JNIAPI的使用不正确。
首先,您应该获得android.os.SystemClock的类引用。作为参数传递的obj是
MyClass
的对象。您应该使用
(*env)->FindClass(env,“android/os/SystemClock”)
为SystemClock获取jclass。然后调用
(*env)->GetStaticMethodID(env,cls,“elapsedRealtime”,“V)J”)
获取方法id。请查看以了解更多详细信息

几分钟前我自己就发现了这个!但是,我必须指定类的名称,比如
(*env)->FindClass(env,“android/os/SystemClock”)
。谢谢