打算对Android的NDK的开发做一总结,首先是JNI部分,接下来是NDK的内容。今天首先介绍一下JNI的第一部分:注册native函数。
当java代码中执行native的代码时候,首先是通过一定的方法来找到这些native方法。而注册native函数的具体方法的不同,会导致系统在运行时采用不同的方式来寻找这些native方法。
JNI有如下两种注册native方法的途径:静态和动态。其中:
静态:先由Java得到本地方法的声明,然后再通过JNI实现该声明方法。
动态:先通过JNI重载JNI_OnLoad()实现本地方法,然后直接在Java中调用本地方法。
静态注册
根据函数名找到对应的JNI函数:Java层调用函数时,会从对应的JNI中寻找该函数,如果没有就会报错,如果存在则会建立一个关联联系,以后在调用时会直接使用这个函数,这部分的操作由虚拟机完成。
静态方法就是根据函数名来遍历java和jni函数之间的关联,而且要求jni层函数的名字必须遵循
特定的格式。
具体的实现很简单,首先在java代码中声明native函数,然后通过javah来生成native函数的具体形式,接下来在JNI代码中实现这些函数即可。
看个例子就更明了了:
Java层:
static {
System.loadLibrary("samplelib_jni");
registerNatives();
}
private native void nativeFunc1();
privat