Saturday, May 12, 2012

NDK的相關知識

一、前言
JAVA在程式語言中,
算是高階語言(人類能理解的語言)。
由於JAVA的主要用途用在商業領域,
因此底層的架構是一層又一層的,
執行的效能可想而知就不如C(中階語言)的快速。

因此才有人會說︰
如果你寫的語言越接近組合語言(低階語言,也是電腦的語言),
執行起來當然就會是最快的。

Android因為提供了NDK,
因此可以將很多C語言的專案收納進來。
當然,
Google提供了NDK的支持,
主要也是因為其自由開放的特性,
更希望大量遊戲之類的專案,
能用進來Android領域被其推廣。

在遊戲畫面裡,
每個物件的處理都需要高度的演算,
這些演算如果使用JAVA來處理,
效能很差。
因此,
如果Android想要有遊戲的支持,
NDK的支持就變成了很重要的重點。

最有名用NDK的例子,
非Angry Bird莫屬。
Angry Bird在Android裡並非使用JAVA寫的,
而是C轉過來在Android上執行的。

二、文章開始
這裡先提及幾個可能需要了解的概念。

首先,
C語言會被放在Android Project的JNI目錄底下。

JNI目錄底下的.mk檔
告訴NDK建構系統(NDK build system)你的Native Code的相關資訊。

JNI目錄底下的.c檔
C語言檔。就好像JAVA檔的副檔名叫.java一樣

JNI目錄底下的.so檔
Android若要執行Native code,
並需先將C語言編譯且封裝成Library。
這個概念就好像我們在JAVA底下,
習慣將程式碼封裝成.jar給別的專案使用一樣。

要將Native code編譯成.so檔,
就要使用make.exe。

make.exe
這個檔案是GNU Make的檔,
功能是將Native code轉成library,
讓其它的程式可以使用。
make出來的檔案,
在Windows環境底下副檔名會是.dll,
而在Linux底下,副檔名就是.so了。

Wiki對於make的解釋
軟體開發中,make是一個工具程式(Utility software),經由讀取叫做「makefile」的文件,自動化建構軟體。它是一種轉化文件形式的工具,轉換的目標稱為「target」;與此同時,它也檢查文件的依賴關係,如果需要的話,它會調用一些外部軟體來完成任務。它的依賴關係檢查系統非常簡單,主要根據依賴文件的修改時間進行判斷。大多數情況下,它被用來編譯原始碼,生成結果代碼,然後把結果代碼連接起來生成可執行文件或者庫文件

在make前,
Android的Project需要有build.xml檔方可編譯,
要在命令提示字元底下、該專案目錄裡,打上指令︰
android update project -p . -s -t android-8
此時,
專案目錄底下就會產生build.xml檔,
這時候,再去對C語言做編譯。

Android也提供了一個快捷的方式make,
就是在專案目錄裡JNI目錄裡,下指令︰
ndk-build

Android一收到ndk-build指令,
便去找系統的make.exe,
幫你把這個C語言打包成Library,
並放進專案目錄底下的libs目錄裡,
副檔名為.so。

ndk-build這個檔案放在NDK目錄底下,
一打開目錄就可以看到了。
要在JNI目錄裡執行ndk-build,
你需要先設定好環境變數。

找不到make.exe
make是在安裝Cygwin的時候,
順便安裝下來的套件,
不要到剛才的GNU make網站去抓安裝包,
因為如果是用這種方式安裝,
屆時在Cygwin裡執行make時,
Cygwin會不認識你自己安裝的make指令哦!

安裝make也蠻簡單的
只要Cygwin在安裝套件包時,
輸入make關鍵字就可以找到了。




文章未完哩....

No comments: