JNI的使用大致有以下4個步驟:
一、在Java中寫native方法
二、用javah命令生成C/C++頭文件
三、寫對應的C/C++程序實現頭文件中聲明的方法,並編譯成庫文件
四、在Java中加載這個庫文件並使用
工具:
1. Eclipse for Java
2. Visual Studio 2015
依賴:
JDK和JRE:1.8.0_144版本
步驟:
在Eclipse新建一個java項目
添加一個java類,放在com.jni包下
注意:java代碼都不要放到默認包下(就是不寫package語句就會放到默認包),默認包下的方法在其他地方都不能調用!!
寫native方法,native方法就是聲明一個非java實現的方法,比如用C/C++實現
1 package com.jni; 2
3 public class JNI { 4 public native String getString(); 5 }
在Eclipse生成,此時在項目目錄會生成對應的.class文件,Eclipse會將.class文件放在項目目錄的bin文件夾下
打開cmd,進入bin目錄
運行javah命令,生成C/C++頭文件,注意要帶上java包名
注意:此處是在bin目錄運行javah,不能進入com/jni下來運行javah,否則不能生成頭文件。
此時在bin目錄下生成了JNI.h頭文件
頭文件內容如下:
1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class com_jni_JNI */
4
5 #ifndef _Included_com_jni_JNI 6 #define _Included_com_jni_JNI
7 #ifdef __cplusplus 8 extern "C" { 9 #endif
10 /*
11 * Class: com_jni_JNI 12 * Method: getString 13 * Signature: ()Ljava/lang/String; 14 */
15 JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString 16 (JNIEnv *, jobject); 17
18 #ifdef __cplusplus 19 } 20 #endif
21 #endif
接下來打開Visual studio 2015,創建一個空的win32控制台程序,在程序類型選擇DLL:
配置JNI開發環境:
在【項目設置】 -> 【VC++目錄】 -> 【包含目錄】中,添加JNI頭文件的路徑
JNI頭文件一般放在jdk目錄下的include文件夾,還有include文件夾下的win32文件夾
注意release和debug以及32位和64位的選擇
將剛剛生成的頭文件復制到vs項目目錄下,在項目中添加該頭文件,同時添加cpp實現頭文件中的函數
main.cppd代碼如下:
#include "com_jni_JNI.h" JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString (JNIEnv *env, jobject obj) { return env->NewStringUTF("string from C++"); }
生成項目,在項目目錄的x64或release文件夾下生成了JNI.dll動態庫,講dll文件復制到Eclipse項目目錄下
修改JNI.java代碼,加載JNI庫並添加運行代碼
1 package com.jni; 2
3 public class JNI { 4 static { 5 System.loadLibrary("JNI"); 6 } 7
8 public native String getString(); 9
10 public static void main(String args[]) { 11 JNI jni = new JNI(); 12 System.out.println(jni.getString()); 13 } 14 }
生成並運行,就可以看到從c++中返回的字符串了