java 生成jni_Java 生成 JNI 头文件

项目需要调用 C++动态库,由于项目包结构发生变化,需要重新生成本地方法的头文件,记录一下基本使用方法。

1. 使用 javac 生成 JNI 头文件

1.1 基本使用方法

1.  JDK版本必须在 1.8 以上

2. 执行命令  javac  -encoding  utf8  -h targetDir   sourceFile

1.2 示例

1.2.1 Java文件目录结构

d8a73433275eaec4a1f6ab411d7eecb1.png

1.2.2  在 NativeCpp.java 文件所在目录打开命令行

1.2.3  执行命令 javac -encoding utf8 -h . NativeCpp.java(注意 点 后面有个空格)

094ee24608018759cfe79e7e7b915c34.png

-encoding  utf8   指定源文件编码格式

-h  .  头文件的输出目录,. 表示当前目录,后面必需加个空格

NativeCpp.java  源文件

1.2.4 结果

9ed8cea92b8e77394916b534434c6d50.png

3. 生成的头文件内容

/*DO NOT EDIT THIS FILE - it is machine generated*/#include

/*Header for class com_streamax_s17_fms_business_jni_NativeCpp*/#ifndef _Included_com_streamax_s17_fms_business_jni_NativeCpp#define _Included_com_streamax_s17_fms_business_jni_NativeCpp#ifdef __cplusplusextern "C"{#endif

/** Class: com_streamax_s17_fms_business_jni_NativeCpp

* Method: parseBlacBox

* Signature: (Ljava/lang/String;II)Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_streamax_s17_fms_business_jni_NativeCpp_parseBlacBox

(JNIEnv*, jobject, jstring, jint, jint);

#ifdef __cplusplus

}#endif

#endif

2. 使用 javah 生成 JNI 头文件

2.1 基本使用方法

在包结构开始的目录打开命令行窗口;

执行命令:javah -d targetDir  -classpath . 包路径+类名(类名不包含文件后缀名)

2.1.1 在包结构开始的目录打开命令行窗口

在源代码包结构开始处或者class文件包结构开始处都可以;

9a0452b9920e3220ebb4f43225f3c6bc.png

2.1.2 执行命令:javah -classpath . com.streamax.s17.fms.business.jni.NativeCpp

-classpath  .  指定加载类的路径,因为当前目录是包结构开始的目录,所以使用 . ,表示当前目录;

com.streamax.s17.fms.business.jni.NativeCpp  本地方法所在的包路径+类名(注意没有.java或者.class的后缀);

2.1.3 结果

88e053b0a3baeefecbdd24dbfa766212.png

不指定输出路径,生成的头文件默认在当前目录下;

使用 -d  targetDir 指定输出路径,

javah -d ../ -classpath . com.streamax.s17.fms.business.jni.NativeCpp  此处指定头文件生成在当前目录的父目录

2.1.4 头文件内容

/*DO NOT EDIT THIS FILE - it is machine generated*/#include

/*Header for class com_streamax_s17_fms_business_jni_NativeCpp*/#ifndef _Included_com_streamax_s17_fms_business_jni_NativeCpp#define _Included_com_streamax_s17_fms_business_jni_NativeCpp#ifdef __cplusplusextern "C"{#endif

/** Class: com_streamax_s17_fms_business_jni_NativeCpp

* Method: parseBlacBox

* Signature: (Ljava/lang/String;II)Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_streamax_s17_fms_business_jni_NativeCpp_parseBlacBox

(JNIEnv*, jobject, jstring, jint, jint);

#ifdef __cplusplus

}#endif

#endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值