一、NDK介绍
NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK 集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk 文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK 可以自动地将so和Java \应用一起打包,极大地减轻了开发人员的打包工作。比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与 win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码。
二、安装cygwin
由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序 移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。下面我们一步一步的安装cygwin吧。
首先到www.cygwin.com下载setup.exe。
然后默认配置next,选择离自己较近的镜像站点准备下载安装包列表。
这里列出后面开发NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make(宁可多选,不能少选),最好再装个vim。search需要安装的包,点skip,把它变成数字版本格式,要确保Bin项变成叉号,而Src项是源码,这个就没必要选了。就可以进行安装了。如下图举例:
下面测试一下cygwin是不是已经安装好了。
运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
然后依次输入gcc –v,g++ --version,make –version,gdb –version进行测试,(注意空格和-)如果都打印出版本信息和一些描述信息,非常高兴的告诉你,你的cygwin安装完成了!
三、配置NDK环境变量
1、下载NDK,我下的最新的android-ndk-r6-windows.zip,直接解压
2、首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件。
3、可以直接用记事本打开.bash_profile文件,添加NDKROOT=/cygdrive/<你的盘符>/<android ndk 目录> 例如:NDK=/cygdrive/e/software/android-ndk-r6,然后export NDKROOT。NDKROOT这个名字随意取。
4、打开cygwin,输入env | grep NDKROOT,若显示你刚才键入的值,则表明配置成功。说明一下,在r4版本之前,需要输入build/host-setup.sh配置环境,这个在NDK目录中的doc目录下的OVERVIEW.TXT有说明:Previous releases required that you run the 'build/host-setup.sh'script to configure your NDK. This step has been removed completely in release 4
四、编译NDK自带的例子
1、运行cygwin,输入cd /cygdrive/<android ndk目录>/samples/hello-jni
2、输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)。
3、此时去hello-jni的libs目录下看有没有生成的.so文件,如果有,你的ndk就运行正常。
4、eclipse中新建android工程,选择第二项,如下图,就可以跑起来了,然后可以研究下其他例子。
五、eclipse中集成CDT
在eclipse中集成c/c++开发环境。首先登录http://www.eclipse.org/cdt/downloads.php,找到对应你Eclipse版本的CDT插件的在线安装地址。 然后eclipse里点Help菜单,找到Install New Software菜单,下面就不说了,你可能会遇到Duplicate location重复路径的错误,这时你可以选择Available Software Sites,找到那个CDT安装的地址,把其状态设置成Enable就行了。
六、配置c/c++编译器下次说