最近了解了关于Java JNI接口的一些关于方法注册与签名相关的知识,在此进行一下总结。
使用JNI接口时,我们首先需要把Java方法声明为native:
public native void f();
然后编写对应的C/C++代码,并编译成为动态链接库(.dll或.so),在调用Java方法前载入动态链接库即可调用:
static {
System.loadLibrary("native-lib");
}
那么,Java文件中的native方法是如何与native文件中的方法一一对应的呢?
在此有两种方法:静态注册与动态注册,下面将一一介绍:
静态注册
采用静态注册时,Java层的native方法与native层的方法在名称上具有一一对应的关系,具体要求如下:
native层的方法名为:Java_<包名>_<类名>_<方法名>(__<参数>)
其中,包名使用下划线代替点号进行分割
只有当native方法出现需要重载的时候,native层的方法名后才需要跟上参数(括号里的内容),参数的编写形式与JNI签名相关(后面会介绍)
通常而言,我们可以把native方法集中在