使用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)