JNI加载和链接Native Methods
使用该System.loadLibrary方法加载Native Methods。在以下示例中,类初始化方法加载库,其中f定义了Native Methods。
class Cls {
native double f(int i,String s);
static {
System.loadLibrary(“pkg_Cls”);
}
}
解析本机方法名称
java中的函数声明需要添加native关键字,jni中的函数命名规则Java_包名_类名_函数名。其中包名中的“.”,需要修改成“_”。如:
jdouble Java_com_example_Cls_f(
JNIEnv * env,/ *接口指针* /
jobject obj,/ *“this”指针* /
jint i,/ *参数#1 * /
jstring s)/ *参数#2 * /
)
使用宏简化本机方法名称
把调用Native方法的函数声明在一个类,这样jni代码的函数命名前缀是一样的,可以使用宏来减少前缀的重复声明:
#define FUNCTION(name) Java_com_example_Cls_##name
jdouble FUNCTION(f(
JNIEnv * env,/ *接口指针* /
jobject obj,/ *“this”指针* /
jint i,/ *参数#1 * /
jstring s)/ *参数#2 * /
))