安装cygwin:html
因为NDK编译代码时必需要用到make和gcc,因此你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操做环境,或者从unix到windows的应用程序移植,很是有用。经过它,你就能够在不安装linux的状况下使用NDK来编译C、C++代码了。下面咱们一步一步的安装cygwin吧。linux
首先要下载cygwin的安装程序setup.exe,下载地址为:android
下载完成后双击运行setup.exe,能够看到向导界面以下:windows
点击下一步,此时让你选择安装方式:bash
1)Install from Internet:直接从Internet上下载并当即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。服务器
2)Download Without Installing:只是将安装文件下载到本地,但暂时不安装。网络
3)Install from Local Directory:不下载安装文件,直接从本地某个含有安装文件的目录进行安装。app
下面测试一下cygwin是否是已经安装好了:eclipse
运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,若是status是ok的话,则cygwin运行正常。而后依次输入gcc –version,g++ --version,make –version,gdb –version进行测试,若是都打印出版本信息和一些描述信息,很是高兴的告诉你,你的cygwin安装完成了!
下载Android NDK:
下载站点:
http://dl.google.com/android/ndk/android-ndk-r4-windows.zip
http://androidappdocs.appspot.com/sdk/ndk/index.html
http://developer.android.com/sdk/ndk/overview.html
若是上面的站点下载不了,也能够到网上找一些下载站点,下载r4版本的android_ndk,下载后直接解压便可。能够考虑和android SDK放在相同的目录下,对之后的开发可能会带来一些便利。
配置NDK环境变量
首先找到cygwin的安装目录,找到一个home/<你的用户名>/.bash_profile文件,个人是C:/cygwin/home/Administrator/.bash_profile,(若是找不到,那就到网上去找解决办法把,这种状况确实可能发生)打开bash_profile文件,添加以下内容(根据你的ndk的安装目录,个人是D盘android-ndk-r4):
ANDROID_NDK_ROOT=/cygdrive/d/android-ndk-r4
export ANDROID_NDK_ROOT
ANDROID_NDK_ROOT这个名字是随便取的,为了方面之后使用方便,选个简短的名字,而后保存。打开cygwin,输入cd $ANDROID_NDK_ROOT,若是输出上面配置的/cygdrive/d/android-ndk-r4信息,则代表环境变量设置成功了。
安装eclipse组件:
Android SDK 和 ADT就不介绍了,下面介绍一个新的组件——CDT。CDT是eclipse开发c++的组件包,这里声明一下,使用NDK开发android是不须要CDT的。若是你安装了CDT,会在之后review别人的c++ code时带来一些方便。能够到CSDN上下载CDT的压缩包,加压后把对应的目录下的文件拷贝到eclipse的对应目录下就能够了。
部署并运行第一个hello-jni例子
用NDK来编译程序:
如今咱们用安装好的NDK来编译一个简单的程序吧,咱们选择ndk自带的例子hello-jni,个人位于D:/android-ndk-r4/samples/hello-jni(根据你具体的安装位置而定),运行cygwin,输入命令cd /cygdrive/d/android-ndk-r4/samples/hello-jni,进入到D:/android-ndk-r4/samples/hello-jni目录。输入$ANDROID_NDK_ROOT/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($ANDROID_NDK_ROOT是调用咱们以前配置好的环境变量,ndk-build是调用ndk的编译程序),此时去hello-jni的libs目录下看有没有生成的.so文件,若是有,你的ndk就运行正常啦!
在eclipse中配置参数编译源码生成.so文件
1)导入hello-jni工程
2)这时你的工程可能会报错,不要紧,工程右键选择Build path->config Build path,以下图:
而后选择builders->new,以下图:
选择program,配置以下图:
出现了添加界面,首先给编译配置起个名字,如:C_Builder或者是默认的New_Builder,如上图,
设置Location为<你cygwin安装路径>/bin/bash.exe程序,例如:C:/cygwin/bin/bash.exe;
设置Working Directory为<你cygwin安装路径>/bin目录,例如:C:/cygwin/bin
设置Arguments为:
--login -c "cd /cygdrive/d/android-ndk-r4/samples/hello-jni && $ANDROID_NDK_ROOT/ndk-build"
上面的配置中/cygdrive/e/android-ndk-r5/samples/hello-jni是你当前要编译的程序的目录,$ANDROID_NDK_ROOT是以前配置的ndk的环境变量,这两个根据你具体的安装目录进行配置,其余的不用变,Arguments这串参数实际是给bash.exe命令行程序传参数,进入要编译的程序目录,而后运行ndk-build编译程序。
接着配置refresh选项:
勾选Refresh resources upon completion
再配置Build Options选项,以下图:
勾选上最后三项,以后点击Specify Resources按钮,选择资源目录,勾选你的项目目录便可:
最后点击Finish,点击OK一路把刚才的配置都保存下来,注意:若是你配置的编译器在其它编译器下边,记得必定要点Up按钮,把它排到第一位,不然C代码的编译晚于Java代码的编译,会形成你的C代码要编译两次才能看到最新的修改,以下图,必定要保证New_Builder在第一位:
如今来测试一下是否能够自动编译呢,打开项目jni目录里的hello-jni.c文件把提示Hello from JNI!改为其余的文字:如:"Hello,My name is lusifer.",而后再模拟器中运行你的程序,若是模拟器中显示了你最新修改的文字,那么你已经所有配置成功啦!
转自:http://ygc87.blog.163.com/blog/static/2396065201221063030169/