您的位置:首页 > 其它

配置NDK集成开发环境全过程第一版

2012-03-01 11:05 288 查看
作者不详 不好意思

一、 什么是NDK?为什么要用它?

比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码

当你想在Java中调用你的C、C++代码时你就可以用它(废话?),那么什么时候你可能考虑使用C、C++代码呢?比如说,你原来用C、C++写过一个游戏程序,里边有你大量的封装好的游戏业务逻辑、算法等代码,你现在想把这个游戏移植到Android上去,怎么办?难道这些业务逻辑、算法要全部用Java重写一遍嘛?现在有了NDK,不用了,你可以直接编译移植这代码了,所以说如果你有代码复用需求的时候,你就可以用它。

再举一个例子,比如说你现在用Android手机的摄像头采集图片信息,采集后的图片你使用Java书写了一个压缩算法进行压缩操作,这个算法非常的耗时,耗费CPU,效果很不理想。这时你就可以尝试采用C来书写这个压缩算法,这时你就可能发现,改用C代码执行后,效率提高了几倍乃至十几倍。当你的客户对程序的性能、速度要求比较高的时候,你也可以考虑用C、C++代码编写部分代码,以满足客户要求。

所以说如果没有NDK编译的话,你的这些代码在Android上是跑不起来的。

二、 看起来似乎不错,我已经想试试了,我要怎么做?

2.1 什么是cygwin?为什么要用它?

由于NDK编译代码时必须要用到make和gcc,所以你得先弄个linux环境,如果你只有windows又不想安装linux环境怎么呢?这时候,cygwin上场了,cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。

下边,跟我一步一步来安装吧:

1、 首先,你得先跑到http://www.cygwin.com下载一个安装包,下载后呢,解压到一个目录里去,注意,为保险起见,不要解压到带空格和中文目录里,否则似乎会造成下载后解压失败的情况。解压后你会看到以下的图标:



2、 然后双击运行吧,运行后你将看到安装向导界面:



3、 点击下一步,如下图:



这是让你选择安装方式:

1)Install from Internet:直接从Internet上下载并立即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。

2)Download Without Installing:只是将安装文件下载到本地,但暂时不安装。

3)Install from Local Directory:不下载安装文件,直接从本地某个含有安装文件的目录进行安装。

4、选择第一项,然后点击下一步,之后如下图:



5、 选择要安装的目录,注意,最好不要放到有中文和空格的目录里,似乎会造成安装出问题,其它选项不用变,之后点下一步:



6、 上一步是选择安装cygwin的目录,这个是选择你下载的安装包所在的目录,默认是你运行setup.exe的目录,直接点下一步就可以,之后如下图:



7、如上图所示,共有三种连接方式选择:

1) Direct Connection:直接连接。

2) Use IE5 Settings:使用IE的连接参数设置进行连接。

3) Use HTTP/FTP Proxy:使用HTTP或FTP代理服务器进行连接(需要输入服务器地址、端口号)。

用户可根据自己的网络连接的实情情况进行选择,一般正常情况下,均选择第一种,也就是直接连接方式。然后再点击“下一步”,之后如下图:



8、 这是选择要下载的站点,建议选用第一个即可,因为我在选择后边几个台湾站点的时候,会出现下载不动或下载时报Download Incomplete. Try again?的情况,选择后点下一步,如下图:



9、会下载加载安装包列表,加载完安装包列表后如下图:



10、上图中,圈1是可以输入你要下载的包的名称,能够快速筛选出你要下载的包。圈2是选择下边树的样式,默认就行,不用动。圈3默认是Category,建议改成full显示全部包再查,省的一些包被隐藏掉。圈4是是否隐藏过期包,默认打钩,不用管它就行,下边开始下载我们要安装的包吧,首先输入autoconf2.1,之后如下图:



11、 然后开始选择安装这个包吧,点skip,把它变成下图所示样式:





12、 看到变成版本数字了吧,要确保Bin项变成叉号,而Src项呢,是连源码也下载,这个就没必要选了,这样autoconf2.1包就选好了,之后再输入automake1.10,然后选择安装,之后如下图:



13、 之后再输入binutils,然后选择安装,之后如下图:



14、 之后再输入gcc-core,然后选择安装,之后如下图:



15、 之后再输入gcc-g++,然后选择安装,之后如下图:



16、 比较多,我就不挨个贴图了,把所需组件名称列出来,挨个查找到然后选择安装就可以了:

autoconf2.1

automake1.10

binutils

gcc-core

gcc-g++

gcc4-core

gcc4-g++

gdb

pcre

pcre-devel

gawk

make

17、 都选完后,点击下一步,就开始下载了,如下图:



18、 以上下载的都是一些必备包,比如说gcc编译器、g++编译器、make和gdb之类的,如果你在开发过程中发现还缺少什么包,就依老办法再去下载就可以了,另外告诉你如果你网不是很牛叉的话,最好不要图省事来个全下载,经常会莫名其妙断掉不说,而且下载又慢包又大,几个G,我就曾经挂机器下了一夜也没下完。如果你采用的不是下载且自动安装的方式的话,你就需要自己手动解压包,需要在命令行下用tar xvfz命令挨个解压tar.bz2包,具体操作由于我没试过,就不再说明了。给一个别人的文章(windows下cygwin+ns2.27+leach安装与总结)。以下为下载完成时自动开始安装时的界面:



19、 终于下载完成也安装完成了,如下图:



20、 图中两个复选框是是否生成桌面图标和添加到开始菜单,选不选看你自己啦。下边我们来试试看cygwin是否安装好了,点击桌面生成的快捷方式,运行cygwin,之后看到下图:



21、 首先,运行cygcheck -c cygwin命令,如下图所示的话,证明cygwin运行正常:



22、 然后运行gcc –version,如下图所示,gcc运行正常:



23、 运行g++ --version如下图所示,g++运行正常:



24、 运行make --version如下图所示,make运行正常:



25、 运行gdb --version如下图所示,gdb运行正常:



26、 如果以上运行都正常的话,那么恭喜你,cygwin的安装完成了。

2.2用NDK来编译程序

1、首先我们要找到我们cygwin的程序安装目录,找到一个home\<你的用户名>\.bash_profile文件,如下图所示:



2、打开后添加

ndk=/cygdrive/<你的盘符>/<android ndk 目录> 例如:ndk=/cygdrive/f/android/android-ndk-r4-windows/android-ndk-r4

export ndk

其中"ndk"这个名字随便起,因为后面要经常使用,建议不要太长。

添加后保存,如下图所示:



3、 之后打开cygwin,输入 cd $ndk,如果如下图所示,证明环境变量设置成功了:



4、好的,下边让我们尝试用ndk来编译一个程序吧,就用ndk自带的hello-jni样例程序包来代替吧,它的样例程序在

<你的盘符>/<android ndk 目录>/samples/hello-jni

例如:F:\android\android-ndk-r4-windows\android-ndk-r4\samples\hello-jni,如下图所示:



5、让我们打开cygwin,进入这个目录吧,键入命令

cd /cygdrive/<你的盘符>/<android ndk 目录>/samples/hello-jni

例如:

cd /cygdrive/f/android/android-ndk-r4-windows/android-ndk-r4/samples/hello-jni

进入成功后如下图所示:



6、然后键入$ndk/ndk-build命令,执行成功后如下图,它会自动生成一个libs目录,把编译生成的.so文件放里边:



7、下边让我们去hello-jni的libs目录下看看它生成的.so文件,如果你看到了这些文件,那么恭喜你,你的ndk也运行正常了,如下图所示:



8、总结一下,相信多数同学也看出来了,$ndk是调用我们之前设置的环境变量,ndk-build是调用ndk的编译程序,通过环境变量的方式来减少我们每次都要输入一大串目录路径字符的麻烦,在编译程序时进入到程序目录里直接键入$ndk/ndk-build就可以编译了。至于编译的程序,我测试了一下,准备好以下目录和文件就可以编译了,如下图所示:



2.3集成编译环境

1、首先,先装上CDT吧,这是Eclipse的C/C++环境插件,装上它后你就可以在Eclipse里创建C/C++项目和代码文件了。插件的安装有两种方式,一种是在线安装,一种是下载安装包自己安装,这里只介绍第一种方式,另一种方式可自行百度。首先登录http://www.eclipse.org/cdt/downloads.php,找到对应你Eclipse版本的CDT插件的在线安装地址,如下图所示:



2、找到对应你eclipse版本的CDT插件地址,之后打开Eclipse,点Help菜单,找到Install New Software菜单,注意一些老版本的Eclipse菜单不太一样,比如说Europa的版本,就是Help--Software Updates—Find and Install--Search for new features to install--New Remote Site,除了菜单不太一样外,安装方式都差不多,可自行百度一下,下图以最新的Helios版本为准:



3、把取的地址填进去,出来插件列表后,选Select All,然后狂点下一步即可完成安装,如下图所示:



4、安装完成后,点菜单File-New-Project,出现新建项目界面,如果出现了C/C++项目,那么恭喜你,CDT安装也完成了,如下图所示:



5、 不过光有CDT还不行,CDT编译代码还是需要调用cygwin当中的编译工具进行,所以我们还需要手动配置C/C++的编译器,还是以NDK自带的hello-jni为例子,首先打开Eclipse,把这个项目导入进来,导入后如下图所示:



6、 然后右键单击HelloJni之后,点击Properties,弹出配置界面,之后再点击Builders,如下图所示:



7、 之后点击New,新添加一个编译器,点击后出现添加界面,选择Program,点击OK:



8、 点击OK后,出现了添加界面,如下图,首先给编译配置起个名字吧,比如说C_Builder,然后,

设置Location为<你cygwin安装路径>\bin\bash.exe程序,例如:F:\cygwin\bin\bash.exe,设置Working Directory为<你cygwin安装路径>\bin目录,例如:F:\cygwin\bin

设置Arguments为

--login -c "cd /cygdrive/f/android/android-ndk-r4-windows/android-ndk-r4/samples/hello-jni

&& $ndk/ndk-build"
这其中,f/android/android-ndk-r4-windows/android-ndk-r4/samples/hello-jni就是你当前要编译程序的目录,根据你的实际目录情况进行替换,$ndk就是你先前设置的NDK 编译器的目录环境变量,也根据你实际设置的名称进行替换,红色字符部分都是根据实际情况进行替换的,其它的不变。这串参数实际是给bash.exe命令行程序传参数,进入要编译的程序目录,然后运行ndk-build编译程序,填写完成后如下图:



9、 接着切换到Refresh选项卡,给Refresh resources upon completion打上钩,完成后如下图:



10、 最后切换到Build Options选项卡,勾选上最后三项,如下图所示:



11、 之后点击Specify Resources按钮,选择资源目录,勾选你的项目目录即可,如下图所示:



12、 之后点击Finish,点击OK一路把刚才的配置都保存下来,这里有一个要注意的地方,如果你的编译器配置在其它编译配置下边,记得一定要点Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改,排到第一位后如下图所示:



13、 现在再次恭喜你,编译配置也配置完成啦,那么来试试看是否可以自动编译吧,打开左侧jni目录里的hello-jni.c文件把提示Hello from JNI!改改,如下图所示:



14、 之后点击run按钮跑起来看看吧,如果模拟器当中出现了你新修改的提示信息,那么最后一次恭喜你,已经全部配置成功了!效果看下图:



三、结束语

以上的过程是我自己的配置过程和对于NDK的一些理解,难免有错误和不足,欢迎发现问题的同学指证和补充,我会听从教诲,有错就改。

另外,在最后我还不得不遗憾的告诉你,目前我们配置成功的只是一个集成编译环境,它还没有集成代码调试功能,不信你可以把代码断点打入C程序代码里试试,你会发现运行Debug后,断点追不进去,只能追到Java代码里。至于如何集成断点调试C代码功能呢?有两个办法,一、等,等我研究会后再写个配置调试教程,二、听毛主席的话,自己动手,丰衣足食,然后出个教程教教我。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐