1. NDK(Native Development Kit)
1.1 NDK简介
Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个工具,我们可以把用C/C++代码编译成可以直接运行在Android平台上的本地代码,这些本地代码以动态链接库( *.so )的形式存在,也正因为这样,我们可以通过复用这些动态链接库从而复用本地代码。
那么,通过NDK这个开发工具包,那么我们是否可以将一个APK完全使用C/C++来编写呢?
答案是不可以的。众所周知,Android应用程序是运行在Dalvik虚拟机上的。而NDK只开发了部分接口,所以NDK只是允许开发人员通过C/C++实现Android APP的部分功能。由于Android系统本身就是Linux核心,NDK只是负责把这些本地代码编写成可以运行在linux上的动态链接库,从而绕过了Dalvik虚拟机,直接运行在Android平台上了。
1.2 NDK下载
1.2.1 下载说明
下载地址:http://www.cr173.com/soft/66623.html
http://developer.android.com/tools/sdk/ndk/index.html#Downloads
截至2013-12-9为止,也就是我写这篇博客的时候,最新版本为:r9
在同一个平台中,下载包有两个,我们选择下载android-ndk-r9b-windows-x86
1.2.2 下载项区别
NDK支持三大平台(windows, Mac, Linux),下面我以windows作为例子进行讲解一下下载项中的Package的区别,如图:
从图中,我们可以看到,每个平台,都有两个相应的下载包,分别是android-ndk-r9b-windows-x86.zip和android-ndk-r9b-windows-x86-legacy-toolchains.zip,那么这两个包有什么区别呢?
官网的解释是这样子的:第一个下载包,也就是图中的android-ndk-r9b-windows-x86.zip,包含了所有平台默认的工具链,如果你不想使用当前默认推荐的工具链,那么可以下载第二个。可能直接这么说会有点空,下面一起看下下面这张图:
从图中我们知道了legacy包只有一个工具链包,而非legacy包中含有各种默认的已经制定好的工具,同时包含有例子,文档等等。
1.3 NDK安装说明
1) 直接把下载到的安装包解压到你想要放的路径;
2) 配置环境变量
I. 新建一个系统环境变量,变量名为ANDROID_NDK_ROOT, 变量值为你的NDK所在的路径,比如我的就是D:\DevTools\JAVA\adt-bundle-windows\android-ndk-r9b
II. 在系统变量 Path 的最前面添加%ANDROID_NDK_ROOT%\;
1.4 NDK 安装验证
完成上面的步骤之后,NDK的安装到此就完成了,下面我们来验证一下NDK安装成功与否.
1) 打开cmd.exe,在里面输入ndk-build -version,输出以下内容,表示安装成功。
1.5 NDK 的使用说明
根据官方文档的说明,从 r7 版本之后,NDK中就多出了一个 ndk-build.cmd,让我们可以直接在windows下运行啦,如果没有特别需求的话,我们再也不用花费一大堆时间去下载安装Cygwin啦……
下面我们以官方给的Project hello-jni 作为例子来讲解吧。
1) 进入到hello-jni目录下或者它的任意父目录,当前我就直接进入到 hello-jni 目录下吧;
2) 直接输入命令ndk-build进行本地代码编译,输出以下内容,表示成功编译成动态链接库,同时我们在hello-jni\obj\local\armeabi路径下可以看到编译好的libhello-jni.so;
编译成功后,我们来尝试一下,看看刚才编译成功的动态链接库是否能够使用。
1) 执行前面博文中我们讲解过的adb update project命令升级该项目,为该项目添加上build.xml等文件,不懂的可以直接查看前面的博文《Android学习第二天-android常用命令》,下面我直接在机子上执行以下命令:
android update project -p . -t 1
输出以下结果表示Update成功。
2) 直接执行命令ant debug进行编译打包成apk(这里需要预先搭建好ANT的环境,如果没有搭建的话可以参考博文:http://my.oschina.net/xiahuawuyu/blog/71296)
3) 开启模拟器
4) 直接执行命令安装bin目录下的APK到模拟器中adb install HelloJni-debug.apk以下是执行结果:
2. Eclipse中使用NDK
2.1 Eclipse CDT (C/C++ Development Tooling)
2.1.1 CDT介绍
CDT是C/C++在Eclipse平台下的开发工具.它提供的功能包括:C/C++编辑器(一些基本的功能:语法高亮显示,代码编辑等),C/C++调试器,C/C++ Launcher,剖析器,内容提示,Makefile生成器等。
2.1.2 CDT 下载与安装
2.1.2.1 CDT 安装前说明
如果大家下载的是谷歌提供的ADT 绑定版,那么它已经默认安装好了相应的CDT了,可以忽略该章不阅读,具体我们还可以通过 Help-> About ADT 进行查看相关信息,如图:
2.1.2.2 CDT 下载
下载地址:http://www.eclipse.org/cdt/downloads.php
该地址上下载的是离线安装包,由于安装包比较大,所以也建议采取这种方式。
注意:不同eclipse版本要下载对应的包,否则安装不了
那么我们应该怎么知道我们的eclipse版本呢?
同样通过Help -> About Eclipse 打开相关信息,如图:
从图中,我们可以知道自己的Eclipse版本,比如我的是Indigo,然后就到下载地址上根据版本下载相应的即可,比如我下载的是就是 cdt-master-8.0.2.zip
2.1.2.3 CDT 安装
1) 通过 Help -> Install New Software打开一个对话框,点击按钮 add。
2) 在弹出来的对话框中,建议给Name的值为:CDT_版本号;然后点击Archive按钮,定位到我们下载到的CDT离线安装包
3) 等待安装完成后,重启eclipse后生效
4) 安装完成重启后,在Eclispe中新建一个项目,如果出现了C/C++项目,则表明CDT插件安装成功了
2.1.2.4 CDT 安装问题解决
1) 如果Location的下面出现“Duplicate location”错误,请到Window -> preferences -> Install/Update -> Avaliable Software Site中找到remove掉。
2) 如果出现缺少eclipse包说明你下载的版本和eclipse版本不匹配,重新下载匹配的重新安装就可以了。
2.2 Sequoyah
2.2.1 Sequpyah 简介
Sequoyah插件用于设置Android工程对Native开发的支持,如果安装的是ADT 绑定版的同学,可以直接阅读 章节2.2.4 NDK的配置
2.2.2 Sequoyah 下载
下载地址:http://www.eclipse.org/sequoyah/downloads/index.php#latest
我们可以从上面的地址中下载离线安装包,具体的安装方法跟上文中的CDT离线安装方法相同,再次不做重复说明。
2.2.3 Sequoyah 在线安装
由于Sequoyah本身并不是太大,在线安装速度也比较快,所以建议在线安装,下面我们来说明一下在线安装的方法
1) 通过 Help -> Install New Software打开一个对话框,点击按钮 add,具体不截图啦,跟CDT中安装的第一步一样。
2) 在弹出的窗口中,Name 输入Sequoyah,Location直接输入http://download.eclipse.org/sequoyah/updates/2.0/ ,如图:
注意:在安装界面不要勾选“Group items by category”复选框,默认是勾选的,出现了列表为空(There are no categorized items)的情况,如图:
2.2.4 NDK的配置
我们以NDK中给出的例子hello-gl2为例子进行讲解:
1) 通过Preference -> Android -> NDK ,点击Browser按钮,定位到我们NDK安装的根目录,如图:
2.3 Eclipse中NDK使用说明
1) 首先我们应该导入项目,右键,选择Import
2) 由于例子不是一个Eclipse项目,所以我们必须如图中那般选择 ,让Eclipse根据已有的安卓代码进行项目构建, 点击Next
3) 定位到我们要导入的项目,并且勾上复制到工作空间中,让例子中搞定代码保持原来的样子作为备份,而我们操作的是复 制到工作区间中的代码。
4) 对我们引入的项目右键,选择Android Tools -> Add Native Support
5) 因为demo中已经为我们写好了cpp文件,所以直接跟他一样名字,点击确定。
6) 如图,点击右上角的按钮进入Perspective C/C++
如果找不到改按钮,我们还可以通过Windows -> Open Perspective -> Other... ,选择C/C++ 即可打开
7) 点击工具栏中的锤子按钮进行编译
8) 等待控制台输出以下内容,说明动态链接库已经编译完成了,同时我们还能够在obj\local\armeabi看到编译好了的动态链接库。
9) 注意:改项目想要直接运行的话会出错,具体解决方法可以参考:http://hi.baidu.com/huareal/item/f00ad3cf8d35ebd7ee183b83,根据该文章修改后,我们发现就可以正常运行了,这也说明了我们在Eclipse中的NDK相关设置配置成功了