美文网首页Android进阶
Java 生成Jni .h头文件两种方法

Java 生成Jni .h头文件两种方法

作者: 翟小乙 | 来源:发表于2022-12-25 11:36 被阅读0次

1. 第一种方式:使用 javac 生成 JNI 头文件

1.1 基本使用方法

  • JDK版本必须在 1.8 以上
  • 执行命令 javac -encoding utf8 -h targetDir sourceFile

1.2 示例

1.2.1 Java文件目录结构

image

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

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

image

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

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

NativeCpp.java 源文件

1.2.4 结果

image

2. 第二种方式:使用 javah 生成 JNI 头文件

2.1 基本使用方法

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

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

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

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

image

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 结果

image

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

使用 -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 <jni.h>
/* 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 __cplusplus
extern "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

参考文章:Java 生成 JNI 头文件

相关文章

网友评论

    本文标题:Java 生成Jni .h头文件两种方法

    本文链接:https://www.haomeiwen.com/subject/eifgqdtx.html