1 、假如你的native方法如下:
package nativeclass;
//import javaclient.Callback;
//import javaclient.ConnectItem;
//import javaclient.DataSet;
//import javaclient.Request;
public class NativeBSClient {
public native void InitLog(final String path, final String name, int level);
public native long GetBSClient();
public native void SetConnect(long client, final Object[]items, int count);
public native int Start(long client);
public native int Stop(long client);
public native int RequestResponse(long client, int serverid, int msgtype, final String msg);
public native int Request(long client, long request);
public native void SetCallback(long client, Object calback);
public native void ReleaseRequest(long client, long request);
public native long GetRankListRequest(long client);
public native long GetRealTimeDataRequest(long client);
public native long GetHisDataRequest(long client);
public native void NotifyData(long client, Object dataset);
public native void SetParam(long client, int id, final String param);
public NativeBSClient()
{
// System.out.println( System.getProperty("java.library.path"));
// System.loadLibrary("bsclientapi-java");
}
}
2、在nativeclass上一级目录,使用javac编译上面的native java声明文件
javac ./nativeclass/NativeBSClient.java
3、在nativeclass上一级目录,继续使用javah命令生成jni头文件
javah -jni nativeclass.NativeBSClient
这样就会在当前目录下生成nativeclass_NativeBSClient.h文件,你也可以指定class路径和jni输出路径:
javah -classpath . -d ./../jni/include -force -jni nativeclass.NativeBSClient
这样就好了
下面是javah命令说明:
javah -h
用法:
javah [options] <classes>
其中, [options] 包括:
-o <file> 输出文件 (只能使用 -d 或 -o 之一)
-d <dir> 输出目录
-v -verbose 启用详细输出
-h --help -? 输出此消息
-version 输出版本信息
-jni 生成 JNI 样式的标头文件 (默认值)
-force 始终写入输出文件
-classpath <path> 从中加载类的路径
-cp <path> 从中加载类的路径
-bootclasspath <path> 从中加载引导类的路径
<classes> 是使用其全限定名称指定的
(例如, java.lang.Object)。