Java 生成 JNI 頭文件


【參考文章】:javah javac 命令行生成native的方法教程

【參考文章】:用javah 導出類的頭文件, 常見的錯誤及正確的使用方法

  項目需要調用 C++動態庫,由於項目包結構發生變化,需要重新生成本地方法的頭文件,記錄一下基本使用方法。

1. 使用 javac 生成 JNI 頭文件

1.1 基本使用方法

  1.  JDK版本必須在 1.8 以上

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

1.2 示例

1.2.1 Java文件目錄結構

  

1.2.2  在 NativeCpp.java 文件所在目錄打開命令行

1.2.3  執行命令 javac -encoding utf8 -h . NativeCpp.java(注意 點 后面有個空格)

  

  -encoding  utf8   指定源文件編碼格式

  -h  .  頭文件的輸出目錄,. 表示當前目錄,后面必需加個空格

  NativeCpp.java  源文件

1.2.4 結果

  

3. 生成的頭文件內容

/* 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

 2. 使用 javah 生成 JNI 頭文件

2.1 基本使用方法

  在包結構開始的目錄打開命令行窗口;

  執行命令:javah -d targetDir  -classpath . 包路徑+類名(類名不包含文件后綴名)

2.1.1 在包結構開始的目錄打開命令行窗口

  在源代碼包結構開始處或者class文件包結構開始處都可以;

  

  

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

  

  不指定輸出路徑,生成的頭文件默認在當前目錄下;

  使用 -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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM