jni javah

如何通过javah生成jni头文件

1.javah的使用说明:

 image

-classpath 给出包含native接口的java类的.class文件路径

-d / –o 指定生成的头文件的,-d只给出文件不指定文件名, -o直接指定文件的路径给名字

-jni 给出包含native接口的java类的包名和类名

 

2.例子

2.1 java文件代码

 1 package com.eostek.serialport;
 2 
 3 import java.io.FileDescriptor;
 4 
 5 public class SerialPort {
 6     static {
 7         System.loadLibrary("serialport_jni");
 8     }
 9     
10     public static native FileDescriptor open(String path, int baudrate);
11     
12     public static native void close(FileDescriptor fd);
13 }

2.2 在终端先编译好java文件,然后通过javah生成jni头文件

例如:(路径根据实际项目修改)

javah -classpath ../../../out/target/common/obj/APPS/SerialPort_intermediates/classes/ -o jni/SerialPort.h -jni com.eostek.serialport.SerialPort

image

执行命令后 在当前目录的jni子目录生成一个SerialPort.h文件,文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_eostek_serialport_SerialPort */

#ifndef _Included_com_eostek_serialport_SerialPort
#define _Included_com_eostek_serialport_SerialPort
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     com_eostek_serialport_SerialPort
* Method:    open
* Signature: (Ljava/lang/String;I)Ljava/io/FileDescriptor;
*/
JNIEXPORT jobject JNICALL Java_com_eostek_serialport_SerialPort_open
  (JNIEnv *, jclass, jstring, jint);

/*
* Class:     com_eostek_serialport_SerialPort
* Method:    close
* Signature: (Ljava/io/FileDescriptor;)V
*/
JNIEXPORT void JNICALL Java_com_eostek_serialport_SerialPort_close
  (JNIEnv *, jclass, jobject);

#ifdef __cplusplus
}
#endif
#endif

posted @ 2016-06-24 16:45  KbDaVinci  阅读(370)  评论(0编辑  收藏  举报