Eclipse環境下通過Cygwin使用NDK編譯jni程序

一、認識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編程規範。


1、安裝使用Cygwin


        安裝Cygwin與安裝一般軟件類似,要注意的有兩點:①下載站點地址選擇163,速度很快。②在Select Packages界面,點擊Devel-Default,使之變成Devel-Install。具體安裝過程可以參考《Android NDK安裝與配置一文。

        如過有Linux系統命令行操作經驗,Cygwin使用起來應該是很簡單的。需要主要的是,Cygwin環境下,目錄結構與Linux類似。而cygdrive目錄下的文件夾,則映射到windows系統的各個盤符。如圖所示:

                                  

2、安裝NDK


        NDK下載地址

        有過嵌入式開發經驗的同學應該都安裝過交叉編譯工具。安裝NDK與其類似。下載NDK的壓縮包後,將其解壓到任意目錄,例如我放在瞭如下路徑:E:\SDK\android-ndk-r9c。目錄下的ndk-build文件就是我們將要使用的編譯器。而所謂的“安裝”,其實就是將編譯器的路徑加入到系統的環境變量。這樣,當我們使用編譯器ndk-build時,就不必每次都鍵入完整路徑,而可以方便的使用環境變量了。

        加入的環境變量如下:
                           

       可是試下能不能使用此環境變量。使用cd命令進入改變量指定的目錄,發現當前目錄更改爲指定目錄,說明環境變量加入成功。
                          

3、使用NDK編譯jni程序

        jni程序的編程規範、makefile的編寫、庫文件的使用方法,可以參考Android JNI知識簡介 Android 開發 之 JNI入門 - NDK從入門到精通 等文章。這裏介紹一下使用NDK編譯jni程序的過程。

        在Andorid工程中,jni程序源碼需要放到工程目錄下的jni目錄。編輯好代碼後,使用Cygwin進入指定的jni路徑下,就可以使用編譯器進行編譯了。編譯好產生的庫文件(so文件)被自動複製到了/libs/armeabi目錄下。

        

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章