摘要: 項目要用到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