使用Eclipse開發Android應用過程中要使用NDK,但需要打開CYGWIN對C/C++代碼進行編譯,雖然可以將NDK和Cygwin整合到Eclipse中,但打開Android工程目錄下的C/C++代碼並不能使用"Open Declaration"等功能 ,而且編輯源代碼時也不能給出拼寫,函數不存在等錯誤提示,以下配置既可以避免要切換到Cygwin中對C/C++代碼進行編譯,也能在Android工程中像在CDT中編譯源代碼一樣,而且C/C++代碼的編譯和Android代碼的編譯是獨立的。
一、準備工作
這裏已經安裝好了Eclipse,裝好了Cygwin、ADT、CDT、Java環境。
二、將CDT整合到Android環境中
1.新建一個C工程,工程名爲Test_C,Project type可以任選,這裏選擇Empty Project,Toolchains也可以任選一個,這裏選擇Cygwin GCC,然後點擊"Finish"
2.右鍵點擊剛纔新建的C工程,選擇Properities->C/C++ Build,確保Builder Settings中Builder type爲External builder,打開Behaviour標籤,將取消Build和Clean選中狀態
3.新建一個Android工程Test,將Test_C目錄下的.cproject文件複製到Android工程目錄下
同時打開Test_C目錄下的.project文件,將<buildSpec>標籤和<natures>標籤下的內容都複製到Android工程目錄下的.project文件相應的標籤下。
4.右鍵點擊Android工程Test,選擇Close project,然後重新打開,打開Test屬性會發現多了C/C++的設置屬性
這個時候我們再新建一個C文件會發現有錯誤提示了
這說明已經成功將CDT整合到Android工程中了,接下來我們添加相應的頭文件即可
這裏string.h在NDK目錄中,jni.h在jdk目錄下,添加完後可以發現代碼中函數已經可以高亮顯示了,遇到錯誤也會有提示。接下來將NDK+CYGWIN也整合進去
三、將NDK+Cygwin編譯環境整合到Android工程中
1.打開Android工程屬性選擇Builders->New->Program點擊OK
2.設置cygwin路徑和輸入參數
Arguments爲輸入參數,如果每次都要輸入工程路徑太麻煩了,這裏可以這麼做:
點擊Variables->Edit Variables->New在彈出對話框中設置name爲workspace_cyg,Value爲cygwin命令行下workspace目錄即e/android/workspace,然後Arguments命令可以改成如下:
--login -c "cd /cygdrive/${workspace_cyg}/${project_name}/jni && $NDK9/ndk-build"
($NDK9爲cygwin中定義NDK目錄的環境變量
${project_name}爲eclipse中定義工程文件名的變量
)
3.Refresh和Build Options自行配置,這裏配置如下
到這裏整個配置就完成了,如果要編譯C/C++代碼,右鍵點擊Android項目選擇"Build Project"即可,運行Android程序不變,這裏可以將Android程序的編譯和C/C++代碼的編譯想分離。以下是隻編譯C/C++代碼截圖:
附上hello-jni.c和Android.mk
#include <string.h>
#include <jni.h>
jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env,
jobject thiz) {
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
void Java_com_example_hellojni_HelloJni_printString(JNIEnv* env, jobject thiz,
jstring str) {
const char* ch = (*env)->GetStringUTFChars(env,str,NULL);
(*env)->ReleaseStringUTFChars(env,str,ch);
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)