前言 :
JAVA以其跨平臺的特性深受人們喜愛,而又正由於它的跨平臺的目的,使得它和本地機器的各種內部聯繫變得很少,約束了它的功能。解決JAVA對本地操作的一種方法就是JNI。JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯繫,調用系統級的各介面方法。
以下簡單介紹如何使用JNI:
1. 建立 HelloJni.java
(1) 編寫如下java 代碼
==============HelloJni.java代碼=============
(1)在Compile 以上述代碼後, 請以javah 建立接下來 C要用的header檔
/>javah gays.ini.HelloJni <假設在對應class目錄>
Ps. 若Compile後的class 在 D:/test/gays/ini/ 路徑, 則當前執行路徑應該是 D:/test/.
若成功則會在當前目錄生成 gays_jni_HelloJni.h 頭文件.
2. 跟據前步驟產出header文件建立 dll檔
(1) 編寫如下C代碼, 並引如前步驟產出的頭文件
如果你是使用vc可以follow 如下:
File - > New - > 專案 -> Win 32 主控台應用程序 -> 選擇下一步 -> 選擇 dll
==============HelloJni.java代碼=============
(2) 編譯成功後, 請將dll 檔複製到放class檔根目錄 (Here is D:/test/) 並改名為 JNISimple.dll
3. 測試
如果步驟1, 2都完成後, 請使用下面Command進行測試:
D:/test>java gays.jni.HelloJni
Dynamic dll is calling!
Java_gays_jni_HelloJni_displayHelloJni method has been executed!
參考:
http://blog.yam.com/hn12303158/article/19236076
研伸閱讀:
JNI Wiki
Sun JNI Document
JNI Function API
JNative Blog
JNative Blob2
JNative Blog3
JNI 開發筆記 (4) Android NDK 簡介
JAVA以其跨平臺的特性深受人們喜愛,而又正由於它的跨平臺的目的,使得它和本地機器的各種內部聯繫變得很少,約束了它的功能。解決JAVA對本地操作的一種方法就是JNI。JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯繫,調用系統級的各介面方法。
以下簡單介紹如何使用JNI:
1. 建立 HelloJni.java
(1) 編寫如下java 代碼
==============HelloJni.java代碼=============
- package gays.jni;
- public class HelloJni {
- public native void displayHelloJni();
- static {
- System.loadLibrary("JNISimple"); //載進的dll檔名
- }
- public static void main(String args[]){
- new HelloJni().displayHelloJni();
- }
- }
(1)在Compile 以上述代碼後, 請以javah 建立接下來 C要用的header檔
/>javah gays.ini.HelloJni <假設在對應class目錄>
Ps. 若Compile後的class 在 D:/test/gays/ini/ 路徑, 則當前執行路徑應該是 D:/test/.
若成功則會在當前目錄生成 gays_jni_HelloJni.h 頭文件.
2. 跟據前步驟產出header文件建立 dll檔
(1) 編寫如下C代碼, 並引如前步驟產出的頭文件
如果你是使用vc可以follow 如下:
File - > New - > 專案 -> Win 32 主控台應用程序 -> 選擇下一步 -> 選擇 dll
==============HelloJni.java代碼=============
- #include
- #include "gays_jni_HelloJni.h"
- JNIEXPORT void JNICALL Java_gays_jni_HelloJni_displayHelloJni
- (JNIEnv *, jobject){
- printf("Dynamic dll is calling!\n");
- printf("Java_gays_jni_HelloJni_displayHelloJni method has been executed!");
- return;
- }
(2) 編譯成功後, 請將dll 檔複製到放class檔根目錄 (Here is D:/test/) 並改名為 JNISimple.dll
3. 測試
如果步驟1, 2都完成後, 請使用下面Command進行測試:
D:/test>java gays.jni.HelloJni
Dynamic dll is calling!
Java_gays_jni_HelloJni_displayHelloJni method has been executed!
參考:
http://blog.yam.com/hn12303158/article/19236076
研伸閱讀:
JNI Wiki
Sun JNI Document
JNI Function API
JNative Blog
JNative Blob2
JNative Blog3
JNI 開發筆記 (4) Android NDK 簡介
沒有留言:
張貼留言