NDK從7開始內建編譯器,在windows上無需配置cygwin的環境。
在eclips中配置NDK路徑
在eclipse中點擊功能表列window-Perferences,配置NDK的路徑。
在工程中添加native lib
建立一個空白的Android工程,在根目錄上點擊右鍵Adnroid Tools - Add Native Support...
在彈出的對話方塊中輸入要建立的lib的名稱,點擊Finish,在工程目錄下會多出一個jni檔案夾,裡面有一個空白的cpp檔案和一個Android.mk檔案
Android.mk檔案的內容是
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestJni
LOCAL_SRC_FILES := TestJni.cpp
include $(BUILD_SHARED_LIBRARY)
TestJni就是要載入的lib的名稱,LOCAL_SRC_FILES 是資源檔的路徑。
hello jni
MainActivity.java代碼如下:
MainActivity = TextView( "TestJni"
TestJni.cpp代碼如下:
#include <jni.h> jstring Java_com_example_testjni_MainActivity_helloFromJni(JNIEnv * env->NewStringUTF(
直接運行程式,可以在Console視窗中看到NDK build的輸出
有一點要注意:由於我使用的是x86的Android虛擬機器來運行,所有使用的是x86的編譯器。制定編譯器的方法是在jni目錄建立一個Application.mk的檔案,輸入以下內容
#APP_ABI := armeabi
APP_ABI := x86
#APP_ABI := armeabi armeabi-v7a x86 mips mips-r2 mips-r2-sf
#APP_ABI := all
APP_STL := stlport_static
如果是普通arm處理器的Android手機,使用APP_ABI := armeabi,如果是x86處理器的,使用APP_ABI := x86,等等。
如果APP_ABI := all,會編譯所有指令的so。
運行結果如下:
至於C/C++的編譯是怎麼實現的,我們可以查看一下工程的Properties
在Builders裡面有多了兩項,一個是CDT Builder,一個是Scanner Configuration Builder。
現有的工程添加Builder
如果工程裡面已經有jni目錄了,但是沒有配置C/C++的編譯器,高手們可以自己添加Builder,對於我這種愛投機取巧的小菜鳥,工程右鍵菜單,新添加一個空白的so,然後再刪除,CDT Builder和Scanner Configuration Builder就出來了。