摘要: 項(xiàng)目要用到JNI摇锋,我又不會(huì)C和C++荸恕。網(wǎng)上找了不少帖子融求,重要的部分都是一筆帶過算撮。灰常不適合新手倒彰,我就自己摸索嘍莱睁。(在此建議那些博客寫的不詳細(xì)的大佬仰剿,就不要寫了。誤人子弟辩昆,這東西不只是給自己做個(gè)記錄,更多的是幫助他人术辐。)
先理步驟:
1.編寫java測(cè)試類
2.利用java測(cè)試類生成C頭文件(我沒有C和C++基礎(chǔ)辉词,后面出現(xiàn)的非JAVA的代碼具體是C還是C++瑞躺,我也不清楚。所以赡勘,教程中我都把它稱為C)
3.利用C頭文件編寫C代碼
4.生成C庫
5.java調(diào)用測(cè)試
第一步:編寫java測(cè)試類
代碼如下:
package com.aijiao.test;
public class JNIDemo{
//定義一個(gè)方法闸与,該方法在C中實(shí)現(xiàn)
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測(cè)試類的工程的bin目錄下執(zhí)行
下圖是生成的頭文件
第三步:用visual studio編寫C代碼
1.選擇文件-》新建-》項(xiàng)目
2.選擇(Win32),輸入項(xiàng)目名稱岸售,項(xiàng)目地址践樱,點(diǎn)擊確定蟀给。
3.直接點(diǎn)擊下一步
4.這里選擇DLL雅倒,空項(xiàng)目,然后點(diǎn)完成平斩。
5.生成如下如的項(xiàng)目結(jié)構(gòu)
6.在源文件的文件夾上面右鍵解孙,選擇添加>>>>類坑填。
7.直接點(diǎn)擊添加
8.輸入類名,點(diǎn)擊完成弛姜。(C++類)
9.在你的JDK目錄的include目錄下有一個(gè)jni.h的文件脐瑰,include的win32目錄下有個(gè)jni_md.h文件,還有java工程的bin目錄下的C頭文件廷臼,一起拷貝到C工程的TestJNI目錄下:(當(dāng)前工程名就叫TestJNI苍在,工程目錄下還有一個(gè)TestJNI目錄,工程目錄-》TestJNI-》jni.h? com_aijiao_test_JNIDemo.h? ? jni_md.h)如下圖:
當(dāng)前目錄為工程目錄
拷貝過來的jni.h荠商,com_aijiao_test_JNIDemo.h和jni_md.h
10.在C項(xiàng)目的頭文件文件夾上面右鍵寂恬,添加>>>>現(xiàn)有項(xiàng)
11.選擇jni.h,com_aijiao_test_JNIDemo.h和jni_md.h
12.打開com_aijiao_test_JNIDemo.h文件
13.將#include 修改為#include "jni.h"莱没,錯(cuò)誤提示消失初肉。
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.做如下配置
第四步:在項(xiàng)目上右鍵生成牙咏,輸出如下下信息
下面是生成的dll庫
第五步:在Java項(xiàng)目下如下設(shè)置
填寫dll庫所在路徑(不需要帶文件名),保存即可嘹裂。
運(yùn)行java類妄壶,結(jié)果入下。
over