常常使用java的同窗必定都接觸過JNI(Java Native Interface)吧。JNI爲咱們提供了java<---->C/C++之間的接口,使得咱們能夠在java中調用C程序,以便實現一些計算複雜度較高的程序(如圖像處理、信號處理等)。另外,也方便咱們使用不少優秀的C庫。java
JNI怎麼使用在這裏我就不介紹了。今天主要來講一下JNI的本地方法頭文件如何生成,以及怎麼方便地在eclipse中一鍵生成。當你使用JNI時,須要在你的java程序中聲明一個類,而且用native關鍵字來代表該類中的方法是使用本地方法(通常是C/C++)實現的。好比下面給出了一個簡單的例子:android
package com.jni.test;eclipse
public class Example {工具
public native String jni_test();
static {
System.loadLibrary("Example");
}
}spa
這裏定義了一個本地方法jni_test,該方法返回一個String。其中System.loadLibrary是用來加載本地庫的(dll或者so)。命令行
有了這個類之後,就能夠調用javac命令編譯,獲得Example.class文件,而後就能夠使用編譯好的.class文件來生成頭文件了。日誌
在java中,提供了javah這個命令來生成本地方法的頭文件。使用命令以下:接口
javah -classpath A -d B -jni Cip
其中,A是你的.class文件的路徑,這樣java就能夠搜索到這個.class文件。B是將要生成的頭文件的存放目錄,能夠根據須要指定。C是java類名,在這個例子中就是com.jni.test.Example。而後就能夠在B目錄下看到生成的頭文件了。開發
但是,這樣不是有些麻煩嗎???
可不是嘛,有了.class後還要在命令行裏敲入javah那一串命令,對剛剛在eclipse中定義了本地方法的開發者來講顯得過於繁瑣了。若是可以在eclipse中定義好本地方法後,直接生成相應的頭文件,那該多方便啊。別急,我這裏就介紹一個方法。
首先在eclipse中點擊下圖圖標的下拉菜單
而後點擊External Tools Configurations
會彈出下面的頁面,而後在那3個地方分別填入下圖中的命令
其實,這裏的操做就是把javah這個可執行程序當作外部工具引入eclipse中來了。調用的時候,eclipse就會執行javah,而且使用預設的arguments,即:
javah -classpath .;./classes -d "${project_loc} -jni ${java_type_name}"
能夠看到,.class文件的搜索目錄是當前工做目錄和子目錄classes(android開發時生成的.class是在classes這個子目錄中,因此這裏也加了這個目錄,若是你不搞android開發,那不加這個目錄也不要緊)。當前工做目錄就是上面設好的${project_loc}/bin,也就是你這個java工程的bin文件夾。這樣javah就能夠在該目錄下找到本地方法的.class文件。-d "${project_loc}"是爲了讓生成好的.h頭文件直接被放置在java工程目錄下,便於後續操做。 最後的${java_type_name}是動態的參數,你在生成.h頭文件以前先在eclipse中選中本地方法那個java文件,這樣java_type_name就自動變成了這個本地方法的名字。
設置好之後,咱們來試着生成一下頭文件,先在eclipse中選中剛剛定義好的本地方法Example.java,而後點擊下圖中的位置來調用javah這個外部工具,就能夠自動生成頭文件了(須要在當前工程中刷新一下才能看到)。
這樣設置好之後,未來各位同窗在須要生成頭文件時,只需寫好本地方法的java類,而後鼠標點擊一下就可以自動生成頭文件了,是否是很方便啊。
這篇日誌就到這裏,咱們下文再見~~~