java 生成jni_Java 生成 JNI 头文件

本文详细介绍了两种生成JNI头文件的方法:1) 使用javac命令,2) 使用javah命令。javac方法中,需确保JDK版本在1.8以上,通过指定编码格式和头文件输出目录来生成头文件。javah方法则需要在类路径下执行命令,指定输出路径和类名。生成的头文件包含了函数签名,用于C/C++的本地方法实现。
摘要由CSDN通过智能技术生成

介绍两个生成jni头文件的方法,一般是用函数签名类型来做native 实现

1. 使用 javac 生成 JNI 头文件

1.1 基本使用方法

1. JDK版本必须在 1.8 以上

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

1.2 示例

切换到文件所在目录打开命令行

执行命令

javac -encoding utf8 -h . DemoCpp.java

(注意 点 后面有个空格,点表示当前路径)

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

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

DemoCpp.java 源文件

2. 生成的头文件内容

DemoCpp.h

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

#include

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: DemoCpp

* Method: HelloWord

* Signature: (Ljava/lang/String;II)Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL DemoCpp_HelloWord

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

#ifdef __cplusplus

}

#endif

#endif

2. 使用 javah 生成 JNI 头文件

2.1 基本使用方法

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

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

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

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

2.1.2 执行命令:

javah -classpath . com.xxx.xxx.xxx.jni.NativeCpp

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

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

2.1.3 结果

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

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

javah -d ../ -classpath . Java_com_xxx_xxx_xxx_jni_NativeCpp

此处指定头文件生成在当前目录的父目录

2.1.4 头文件内容

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

#include

/* Header for class Java_com_xxx_xxx_xxx_jni_NativeCpp*/

#ifdef __cplusplus

extern "C" {

#endif

/* * Class: Java_com_xxx_xxx_xxx_jni_NativeCpp

* Method: parseBlacBox

* Signature: (Ljava/lang/String;II)Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_xxx_xxx_xxx_jni_NativeCpp_parseBlacBox

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

#ifdef __cplusplus

} #endif

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值