一、認識Cygwin、NDK和jni
首先來認識一下什麼是Cygwin、NDK和jni。
Cygwin:Cygwin是一個在windows平臺上運行的unix模擬環境,它對於學習unix/linux操作環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。本文就是要用Cygwin模擬Linux環境,使用NDK中的編譯工具,來編譯jni程序。
NDK:談到NDK,想必大家都會想到SDK(Software Development Kit, 即軟件開發工具包 )。SDK一般是一些被軟件工程師用於爲特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件的開發工具的集合。Android SDK自然就是開發Android程序時使用的軟件開發工具包。NDK的全稱是Native Development Kit,android NDK官網上是這麼說的"The NDK is
a toolset that allows you to implement parts of your app using native-code languages such as C and C++。"意思是說,NDK是一套用來幫助我們在程序中添加C/C++代碼的工具集合。通常,我們使用NDK中的編譯工具來將C/C++代碼編譯成庫文件。
jni:JNI是Java Native Interface的縮寫。jni是爲了讓java能夠調用本地已編譯代碼(尤其是C和C++)而設計的,只要調用約定受支持,也可以調用其他代碼就可以了。
二、爲什麼要使用jni
使用jni通常有兩種原因:一是爲了提高程序效率,程序的核心部分使用C/C++開發,而UI部分使用java開發,通過jni調用核心代碼,例如一些遊戲、視頻圖像處理軟件。二是爲了複用已經開發好的穩定模塊,提高開發效率。
三、如何使用jni
如何將Cygwin、NDK、jni三者聯繫起來呢?方法如下:使用Cygwin在windows上模擬Linux環境,在這個環境裏使用NDK裏的編譯工具,將寫好的、符合jni規範的C/C++代碼(或者其他代碼)編譯成庫文件,然後java程序就可以調用庫中的函數了。所以現在有如下三個問題:①安裝、使用Cygwin。②安裝NDK。③瞭解jni編程規範。