Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
例子:
public class VadChecker {
static {
System.loadLibrary("vadLib");
}
//other code here
// 动态链接库用到的函数需要declar
public static native int native_initialize();
public static native void native_uninitialize(int handle);
public static native void native_reset(int handle);
public static native int native_appendData(int handle, byte[] pData, int len, VadData vad);
public static native int native_setParam(int handle, int paramID, int paramValue);
}
在这个项目的Libs 目录下有一个文件.so 文件 -》 libs/armeabi/libvadLib.so
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
例子:
public class VadChecker {
static {
System.loadLibrary("vadLib");
}
//other code here
// 动态链接库用到的函数需要declar
public static native int native_initialize();
public static native void native_uninitialize(int handle);
public static native void native_reset(int handle);
public static native int native_appendData(int handle, byte[] pData, int len, VadData vad);
public static native int native_setParam(int handle, int paramID, int paramValue);
}
在这个项目的Libs 目录下有一个文件.so 文件 -》 libs/armeabi/libvadLib.so