NDK是什么?通俗的讲就是Android中让某些效率要求高的代码可以用C/C++来编写的一个工具。某些C/C++的忠实支持者这时可能要兴奋了,Android终于可以用C/C++来写了,但是说句泼冷水的话,实际上应用层得应用程序是不可能完全用C/C++来写的。NDK的作用只是将程序的一部分用C/C++来编写然后Java来调用而已。就像C调用汇编代码一样。
    废话不多说,我们开始来搭建NDK的环境。

    NDK的基础首先要有make和gcc。有些人就晕了,make和gcc不是linux上的东西么?windows下怎么办?幸好我们有cygwin。cygwin是一个在windows下运行的模拟unix环境的软件。当然如果你在linux下开发那就更好了。
    步骤一、安装cygwin
    进入cygwin的官网,http://www.cygwin.com/ 。下载setup.exe并打开。
    选择在线安装方式。(当然如果你下到了完整版本的,可以选择从本地目录安装)
QQ截图未命名2
    然后选择根目录
QQ截图未命名3
    选择直接连接
QQ截图未命名5
    选择合适的镜像下载,选择台湾的镜像比较快些,也就是tw结尾的,网上有些人手动输入一个网址,我验证没有通过。
    如果第一次安装可能会出现如下错误,不去理会。
QQ截图未命名6
    之后选择安装的软件包,一定要确认make和gcc已经被选择,所以点击Devel和Shells分支中间的循环图标,使之成为Install状态。还有就是默认linux下的编辑器是只安装emacs的,如果喜欢用vim的人可以将vim装上,分支为Editors,选择里面的vim。
QQ截图未命名7
    然后就一路下一步吧。这个时候你可以去逛街,吃饭,理发都行,因为我安装这个花了我一下午的时间。 -  -
    安装好后,点击桌面的cygwin图标,运行效果如下:
QQ截图未命名8
 
    安装好Cygwin后,就相当于我们模拟出了linux环境,接着我们就需要来下载安装ndk了。
    步骤二、下载安装ndk.
    ndk的官网下载进不去,google一下下载地址吧,最新版本好像是r5.
    将ndk下载后解压到某个路径,这里假设为C:\android\ndk目录下
    在cygwin中设置一下ndk的路径变量。
    cd ~
    ls –a
    QQ截图未命名9
    我们看到里面有一个.bash_profile文件,会在启动shell的时候运行里面的配置。我们在里面添加几行。
    其实,所有的文件都在我们之前设置的cygwin的根目录中,我之前设置的是C:\cygwin,从目录中找到.bash_profile文件,加入
    ANDROID_NDK_ROOT=/cygdrive/c/android/ndk 
    export ANDROID_NDK_ROOT
    我们的C盘在cygwin中为/cygdrive/c, 相当于C:\android\ndk, 还要注意,linux下的斜线和windows是反着的
    如果你用windows的编辑器加入了改两行,重启后会出现如下错误:
QQ截图未命名10
    这是由于windows中的回车实际上是“\n\r”,而linux下为”\r”,如果用windows的编辑器更改的话就会出现错误。解决该问题有两种方法,第一种方法,用windows的编辑器编辑完后,调用dos2unix .bash_profile,重启,ok,没有问题了;另一种方法是直接使用cygwin中的编辑器,如vim和emacs。
    其实上面的这些完全是为了访问ndk目录是方便而设的,如果你不嫌输入路径麻烦,可以省去。- -!
 
    好,我们来编译一下例子程序吧。
 QQ截图未命名12
    OK,我们的libhello-jni.so已经生成了。
 
 
    注:一些老版本的ndk需要初始化一次才能用
    ndk的初始化,很简单,在cygwin中运行
    cd $ANDROID_NDK_ROOT
    build/host-setup.sh
    它的编译方式也不一样,在ndk根目录下,调用make APP=hello-jni