(1)JNI簡介
JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其他語言的通信(主要是C&C++)。從Java1.1開始,JNI標准成為java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設計的,但是它並不妨礙你使用其他編程語言,只要調用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會喪失平台可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的。例如,使用一些舊的庫,與硬件、操作系統進行交互,或者為了提高程序的性能。JNI標准至少要保證本地代碼能工作在任何Java 虛擬機環境。 簡單的來說JNI就是方便了Java調用c,c++語言的函數;java通過JNI提供接口(頭文件),c,c++實現這些函數供java調用。
()Java調用動態庫的第一步:編寫Java JNI接口代碼如下
package com.xiaomo.jni; public class JNIInterface { static{ System.loadLibrary("JNITest");//這里的“JNITest”就是我們需要生成的dll本地動態鏈接庫,書寫庫名就可以了,但是這個dll或則so文件必須在path的目錄下,要不然會找不到 } //這里我們需要給這個庫提供接口函數 public native int add(int a,int b);//加法函數 public native int mis(int a,int b);//減法函數 }
通過java c命令生成JNIInterface.class文件如下圖所示:
這個時候會在相應的文件夾目錄下生成.class文件如下圖所示:
(2)通過javah 命令將JNIInterface編譯成.h頭文件,具體編譯的時候需要包名.類名,如下圖所示
通過編譯后出現一個com_xiaomo_jni_JNIInterface.h的頭文件,這個將相當於Java通過JNI提供給動態鏈接庫的頭文件
(3)第三步當然是在編寫本地動態庫的時候引入這個頭文件,實現該頭文件的方法。將編寫好的JNITest.dll文件房子啊JRE的bin目錄下,或者是JDK的bin目錄下
(4)第四步,在java端實例化JNIInterface這個類,調用這個類的方法。具體的會遇到很多的問題,大多都是路徑問題,生成的dll文件是32位,64位的問題。