這里定義了一個本地方法jni_test,該方法返回一個String。其中System.loadLibrary是用來加載本地庫的(dll或者so)。
有了這個類以后,就可以調用javac命令編譯,得到Example.class文件,然后就可以使用編譯好的.class文件來生成頭文件了。
在java中,提供了javah這個命令來生成本地方法的頭文件。使用命令如下:
javah -classpath A -d B -jni C
其中,A是你的.class文件的路徑,這樣java就可以搜索到這個.class文件。B是將要生成的頭文件的存放目錄,可以根據需要指定。C是java類名,在這個例子中就是com.jni.test.Example。然后就可以在B目錄下看到生成的頭文件了。
在eclipse中一鍵調用javah自動生成頭文件
可是,這樣不是有些麻煩嗎???
可不是嘛,有了.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類,然后鼠標點擊一下就能夠自動生成頭文件了,是不是很方便啊。