JNI (Java Native Interface)
簡單來說JNI是用來讓JAVA可以跟C、C++溝通的介面,不論是JAVA呼叫C,或是C呼叫JAVA,由於C code通常來說比較接近底層(driver)之類的,所以有些時候可以處理JAVA無法辦到的事。
eclipse用法
需要先安裝NDK(Native Development Kit),如何安裝可參考 https://goo.gl/vvy5up
新增一個Android project後
專案點選右鍵->Android Tools->Add Native Support…->取名字(TestNDK)
到專案底下應該會看見JNI的資料夾,裡面會有你剛剛命名的TestNDK.cpp + Android.mk
Android.mk是用來告訴eclipse你有哪幾個.c或.cpp檔需要編譯,還有其他編譯時需要的參數。
打開TestNDK.cpp,如果前面有問號表示Link不到

在JNI資料夾點選右鍵->Properties->C/C++ General->Paths and Symbols->Add->File system…

選到當初NDK的路徑,要選到include資料夾D:\AndroidTools\adt-bundle-windows-x86_64-20140702\android-ndk-r10\platforms\android-17\arch-arm\usr\include
JAVA Code
MainActivity.java 加入 Libray名字
static {
System.loadLibrary("TestNDK");
}
public native String hello(String name);
第1~3行: 載入Libray名字
第5行: 函式宣告方式
JNI Code
TestNDK.cpp 加入
函式的命名方式
- 須包含完整的package name,前面要串Java且 "." 部分通通換成 "_",例如 package name = com.example.testndk.MainActivity,在JNI裡就要寫成 Java_com_example_testndk_MainActivity
- function name也一樣,如果function name本身帶有 "_" 要改成 "_1"
- 格式為 JNIEXPORT + 要回傳的type + package name + function name
完整寫法如下
JNIEXPORT jstring JNICALL
Java_com_example_testndk_MainActivity_hello( JNIEnv* env, jobject obj, jstring str ) {
// do something...
}
請先 登入 以發表留言。