NDK : http://developer.android.com/sdk/ndk/index.html
Cygwin :http://www.cygwin.com
1 Cygwin 安裝
Cygwin安裝就很簡單啦,直接下一步就行。唯一需要注意的就是,因為我們在cygwin中編譯ndk的時候需要make和gcc,所以我們在Select Packages 這一步的時候要選擇Devel 選項為Install(預設為不安裝的,Defatult狀態)。順便也要把vim所在的包選擇為isntall,因為後續我們在cygwin中需要編輯檔案。vim所對應的包名字呀? 不記得了,直接在尋找裡面輸入vim就能看到對應的package名字了。
2 NDK 安裝
更簡單了,只需要將下載的檔案解壓縮到任意目錄就可以了。
3 編譯NDK程式
這裡先介紹下Application.mk不在應用程式目錄下的jni裡,而是在其它目錄下的jni裡,這裡具體目錄就是在$NDK_ROOT/jni/下。通過Application.mk中的APP_BUILD_SCRIPT可以指定任意的應用程式裡的Android.mk的特性來實現的。當然Application.mk也可以和Android.mk一起放在應用程式$Program/jni目錄下,這種情況的編譯請參見我的另一篇文章。
1> 先配置ndk相關環境
進入到cygwin的/home/username目錄,username是你當前登入機器的使用者名稱,修改該目錄下的.bash_profile,在檔案的尾部加入如下代碼,設定ndk安裝的根目錄。
NDK_ROOT=/cygdrive/d/workdoc_tool/android_env_build/windows/android-ndk-r6b
export NDK_ROOT
NDK_PROJECT_PATH=/cygdrive/d/workdoc_tool/android_env_build/windows/android-ndk-r6b
export NDK_PROJECT_PATH
環境變數名NDK_ROOT為NDK安裝包根目錄,名字可以隨便取,只是用於切換目錄時方便而已。
環境變數NDK_PROJECT_PATH名字不能更改,因為如果定義了此環境變數後,編譯器會根據此變數去找此目錄下的jni下的Application.mk.
然後重新啟動Cygwin。
2> cd $NDK_ROOT, 在ndk安裝目錄下mkdir jni 目錄。
3>cd $NDK_ROOT/build/core,將該目錄下的default-application.mk 拷貝到2>中jni目錄下,並且重新命名為Application.mk。
4> 修改Application.mk中變數內容,指定需要編譯的project路徑,並且指定project path下對應的build 的make file指令碼。這裡編譯ndk內建的samples下的hello-jni工程。
# Project Path
APP_PROJECT_PATH := $(NDK_PROJECT_PATH)/samples/hello-jni
# We expect the build script to be located here
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk
變數APP_PROJECT_PATH是可選的,不過這裡最好是指定下,看起來清晰些.
變數APP_BUILD_SCRIPT是必須的
5> $(APP_PROJECT_PATH)/jni/Android.mk 內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
6> cd $NDK_ROOT,執行./ndk-build.
因為指定了NDK_PROJECT_PATH環境變數,所以在$NDK_ROOT根目錄下執行./ndk-build或是在$APP_PROJECT_PATH下執行$NDK_ROOT/ndk-build來編譯$APP_PROJECT_PATH程式都可以。編譯器都會先根據NDK_PROJECT_PATH環境變數去找jni/Application.mk,然後根據其中的APP_BUILD_SCRIPT來執行對應的Android.mk.
這樣就可以編譯Application.mk中指定的native project了,在samples/hello-jni/libs/armeabi/下產生動態庫libhello-jni.so了。
呵呵, 大功告成了!