Java 使用Native檔案,一般分解為下面幾個步驟:
在Java代碼中使用native關鍵字聲明一個本地方法 運行javah,獲得包含該方法聲明的C語言標頭檔(使用jni編程中的C函數名通常是相關於Java方法有一定的命名規則的,稍後會介紹,我們使用javah來協助我們獲得該方法名) 用C語言或C++實現我們所需要的功能 產生共用庫檔案,共用庫檔案可以是windows風格的.dll檔案,也可以是UNIX風格的.so檔案 為了確保虛擬機器在第一次使用該類之前就會裝載這個庫,使用靜態初始化塊來載入
操作步驟:
1.CMD 切換到目錄
cd D:\Works\Android\WorkspaceUnify\rsPolylabel\binD:
2.編譯標頭檔
javah -jni -classpath . -d ./jni rsPolylabel.Polylabel
結果:產生h檔案 rsPolylabel_Polylabel.h 到jni檔案夾
3.標頭檔代碼描述
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class rsPolylabel_Polylabel */#ifndef _Included_rsPolylabel_Polylabel#define _Included_rsPolylabel_Polylabel#ifdef __cplusplusextern "C" {#endif/* * Class: rsPolylabel_Polylabel * Method: helloWishchinJni * Signature: ()V */JNIEXPORT void JNICALL Java_rsPolylabel_Polylabel_helloWishchinJni (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif
5.利用Vs產生工程
使用VS建立一個Dll工程,根據標頭檔編寫相應的CPP檔案,在包含目錄中添加目錄:
C:\Program Files\Java\jdk1.8.0_152\include
和
C:\Program Files\Java\jdk1.8.0_152\include
7.載入動態庫
網上的方法,把儲存dll檔案的目錄加入到系統目錄Path,然並卵。。。
在Eclipse程式中,運行System.out.println( System.getProperty("java.library.path"));
此行運行完成,輸出目錄
D:\Works\Android\WorkspaceUnify\rsPolylabel\lib\x64;
D:\Works\Android\WorkspaceUnify\rsPolylabel\lib\hdf5
因此把dll檔案放入 lib\x64 目錄,載入成功。
6.編寫代碼
在CPP檔案中添加標頭檔包含和JNI包含
#include <jni.h>/* Header for class rsPolylabel_Polylabel */#include "rsPolylabel_Polylabel.h"
此後按照一般的方法產生動態庫即可
7.引入動態庫
測試成功。