Android培训班(84)Dalvik虚拟机的JNI测试函数

Dalvik虚拟机里,提供了一些JNI的调用测试函数,以便确认JNI的机制是否可以运行,JNI调用效率是否达到设计的目标,它是通过在registerSystemNatives函数初始化,然后调用jniRegisterSystemMethods函数来设置JNI函数。


JNI的测试函数代码如下:

/*

* JNI registration

*/

staticJNINativeMethodgMethods[] = {

/*name, signature, funcPtr */

{ "emptyJniStaticMethod0", "()V", emptyJniStaticMethod0 },

{ "emptyJniStaticMethod6", "(IIIIII)V",emptyJniStaticMethod6 },

{ "emptyJniStaticMethod6L",

"(Ljava/lang/String;[Ljava/lang/String;[[I"

"Ljava/lang/Object;[Ljava/lang/Object;[[[[Ljava/lang/Object;)V",

emptyJniStaticMethod6L },

};

这段代码是提供JNI测试函数的接口和相关实现的C函数入口。


intregister_org_apache_harmony_dalvik_NativeTestTarget(JNIEnv*env)

{

intresult = jniRegisterNativeMethods(env,

"org/apache/harmony/dalvik/NativeTestTarget",

gMethods,NELEM(gMethods));

这段代码把JNI调用接口设置到包org.apache.harmony.dalvik.NativeTestTarget下面,这样在Java的应用程序里就可以调用了。


if(result != 0) {

/*print warning, but allow to continue */

LOGW("WARNING:NativeTestTarget not registered\n");

(*env)->ExceptionClear(env);

}

return0;

}


/*

* public static voidemptyJniStaticMethod0()

*

* For benchmarks, a do-nothingJNI method with no arguments.

*/

staticvoidemptyJniStaticMethod0(JNIEnv*env, jclassclazz)

{

//This space intentionally left blank.

}


可见这些系统函数的代码,都空的结构,没有真实的代码运行,就可以用来测试JNI是否可以工作,测试JNI调用的时间需要多少,可以提供准确的时间。

你可能感兴趣的:(android)