轉載請說明出處~
原文連結:http://blog.csdn.net/zgyulongfei/article/details/7390658
本文教程翻譯jni官方文檔的部分內容。
要查看Jni官方文檔,請點擊這裡
先感歎一下時光如水,歲月不留人哇有木有!!!認真想想在XMU的這三年,真的改變了我好多。
我還清楚地記得學習C語言寫的第一個程式就是Hello,world!
那個時候對程式設計語言真是一竅不通,不過也正是從那個時候開始,對編程產生了興趣~
閑話不多說,既然是入門教程,我們就從簡單的Hello,world開始。
這個程式使用java代碼調用C函數來輸出Hello,world.
步驟如下:
1、 建立一個HelloWorld.java類,並在類中聲明native方法
2、 利用javac命令編譯HelloWorld.java產生HelloWorld.class
3、 利用javah –jni命令產生C標頭檔HelloWorld.h,該標頭檔為native方法的實現提供了函數原型。
4、 寫出native方法HelloWorld.c
5、 將HelloWorld.c編譯成native類庫,可以建立HelloWorld.dll或HelloWorld.so
6、 運行HelloWorld程式,HelloWorld.class與(HelloWorld.so/HelloWorld.dll)會在運行時候被載入
流程圖:
實踐才能出真知,下面我們正式開始啦~
註:本人作業系統為Windows 7
1、在F盤建立目錄【HelloWorld】,然後編寫HelloWorld.java
public class HelloWorld {//聲明本地方法print()public native void print();public static void main(String[] args) {//建立一個HelloWorld對象HelloWorld helloWorld = new HelloWorld();//調用對象方法printhelloWorld.print();}//類裝載器,在類被使用時候載入static{System.loadLibrary("HelloWorld");}}
2、編譯HelloWorld.java產生HelloWorld.class
3、建立HelloWorld.h檔案
查看該標頭檔內容
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
看到聲明的方法了嗎?沒錯,就是它——Java_HelloWorld_print(JNIEnv*,jobject);
第一個參數是JNIEnv的介面指標,第二參數是HelloWorld對象的引用,類似於C++中的this指標。
註:JNIEXPORT和JNICALL兩個宏命令可以無視之~
【Java代碼】通過這個【函數介面】來調用底層【C代碼】
4、編寫HelloWorld.c實現這個方法
#include <jni.h>#include <stdio.h>#include "HelloWorld.h"JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj){printf("yulongfei says:");printf("Hello, world!\n");return;}
5、將HelloWorld.c編譯為native類庫
由於我是windows 7作業系統,所以編譯成HelloWorld.dll庫,這裡需要使用工具Visual Studio 2008
操作步驟:
Step 1:啟動VS2008 --> 檔案 --> 建立項目 --> Visual c++ --> Win32控制台應用程式
Step 2: 名稱輸入HelloWorld,程式儲存路徑你自己定,,點擊確定
Step 3:在嚮導中選擇【下一步】。在應用程式類型中,選擇【DLL】;在附加選項中,選擇【空項目】。選擇【完成】
Step 4: 開啟資源管理員,將HelloWorld.h複製到【標頭檔】中,將HelloWorld.c複製到【源檔案】中。
Step 5: 選中功能表列的【產生】-->【產生HelloWorld】;或者直接按下快速鍵Shift+F6
註:如果報錯
請你定位到jdk安裝目錄下,然後將【include\jni.h】以及【include\win32\jawt_md.h】和【include\win32\jni_md.h】這三個檔案拷貝到你VS安裝目錄的VC\include下,我的是D:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include。
Step 6: 定位到VS2008剛剛建立的HelloWorld工程目錄下,將Debug目錄下的HelloWorld.dll 拷貝到F盤【HelloWorld】的目錄下,接下來就可以運行程式了。
6、運行程式
哈哈,開心吧,成功輸出:Hello, world!咯~~
本次學習源碼下載連結,請點擊這裡!