Android系統中采用了JNI的方式來調用C/C++方法,然而,在Android系統裡進一步加強了Java JNI的使用,使JNI的調用更具有效率。因此,總的來說,Android系統裡可以采用兩種方式來使用JNI。第一種:Java原生JNI,使用dll等動態鏈接庫 ;第二種,Android加強版JNI,通過動態加載*.so鏈接庫來進行JNI調用。今天,我們分析第一種JNI使用方式,也稱得上是JNI入門。
由於Java與其他編程語言采用的語法不同,為了讓Java與C/C++庫函數能進行通信,約定的一個參數類型映射如下:
Java類型 C/C++類型
void void
jboolean boolean
jint int
jlong long
jdouble double
jfloat float
jbyte jbyte
jchar char
jshort shor
上面的只是簡單類型的一個映射,後面我們會完善其他參數類型的映射。
開發環境介紹(Windows下):
Eclipse: 主要用來創建Java工程
MicrosoftVC++6.0: 生成動態鏈接庫供相應的Java文件加載
本例中,我們簡單的創建了一個Java工程HelloBabyJNI,工程絕對路徑位於E:\MyCode\AndroidCode\HelloBabyJNI路徑下, 主文件路徑位於\src\lover\hellojni路徑下(路徑對後面的javah編譯很重要)
HelloBabyJNI.java文件如下:
[java]
2,編譯HelloBabyJNI.java文件,生成HelloBabyJNI.class文件,位於路徑\src\lover\hellojni\HelloBabyJNI.class
3,使用javah指令編譯HelloBabyJNI.class文件,生成Java與C/C++之間進行通信的約定接口,它規定了Java中nativemethod在C/C++的具體接口。運行cmd後,進入於E:\MyCode\AndroidCode\HelloBabyJNI\src路徑下,使用javah指令,指令集形式如下:
javah -classpath E:\MyCode\AndroidCode\HelloBabyJNI\src -jni com.lover.hellojni.HelloBabyJNI,具體指令用法可以參考javah –help,本文只是重應用上。
如圖所示: