這可能是有史以來最詳細的JNI入門教程

摘要: 項目要用到JNI,我又不會C和C++。網上找了不少帖子,重要的部分都是一筆帶過。灰常不適合新手,我就自己摸索嘍。(在此建議那些博客寫的不詳細的大佬,就不要寫了。誤人子弟,這東西不只是給自己做個記錄,更多的是幫助他人。)

先理步驟:

1.編寫java測試類

2.利用java測試類生成C頭文件(我沒有C和C++基礎,后面出現的非JAVA的代碼具體是C還是C++,我也不清楚。所以,教程中我都把它稱為C)

3.利用C頭文件編寫C代碼

4.生成C庫

5.java調用測試

第一步:編寫java測試類

代碼如下:

package com.aijiao.test;

public class JNIDemo{

//定義一個方法,該方法在C中實現

public native void testHello();

public static void main(String[] args){

? ? ? ? ? ? ? ? ? //加載C文件 ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?System.loadLibrary("TestJNI");

? ? ? ? ? ? ? ? ?JNIDemo jniDemo =new JNIDemo();

? ? ? ? ? ? ? ? ?jniDemo.testHello();

? ? ? ? ?}

}

第二步:利用java類生成C頭文件

生成命令如下:

javah-classpath.-jnicom.aijiao.test.JNIDemo

該命令需要在java測試類的工程的bin目錄下執行

下圖是生成的頭文件


第三步:用visual studio編寫C代碼

1.選擇文件-》新建-》項目


2.選擇(Win32),輸入項目名稱,項目地址,點擊確定。


3.直接點擊下一步


4.這里選擇DLL,空項目,然后點完成。


5.生成如下如的項目結構


6.在源文件的文件夾上面右鍵,選擇添加>>>>類。


7.直接點擊添加


8.輸入類名,點擊完成。(C++類)


9.在你的JDK目錄的include目錄下有一個jni.h的文件,include的win32目錄下有個jni_md.h文件,還有java工程的bin目錄下的C頭文件,一起拷貝到C工程的TestJNI目錄下:(當前工程名就叫TestJNI,工程目錄下還有一個TestJNI目錄,工程目錄-》TestJNI-》jni.h? com_aijiao_test_JNIDemo.h? ? jni_md.h)如下圖:

當前目錄為工程目錄


拷貝過來的jni.h,com_aijiao_test_JNIDemo.h和jni_md.h


10.在C項目的頭文件文件夾上面右鍵,添加>>>>現有項


11.選擇jni.h,com_aijiao_test_JNIDemo.h和jni_md.h


12.打開com_aijiao_test_JNIDemo.h文件


13.將#include 修改為#include "jni.h",錯誤提示消失。


14.在TestJNI.cpp文件中寫入如下代碼:


代碼:

#include "com_aijiao_test_JNIDemo.h"

#include <iostream>

#include <stdio.h>

JNIEXPORTvoidJNICALLJava_com_aijiao_test_JNIDemo_testHello(JNIEnv *, jobject)

{

? ? ? ? ?printf("this is C++ print");

}

15.配置C工程,在解決方案上右鍵,選擇屬性


16.做如下配置


第四步:在項目上右鍵生成,輸出如下下信息


下面是生成的dll庫


第五步:在Java項目下如下設置


填寫dll庫所在路徑(不需要帶文件名),保存即可。


運行java類,結果入下。


over

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容