Android NDK是一套容许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,经过这个工具,咱们能够把用C/C++代码编译成能够直接运行在Android平台上的本地代码,这些本地代码以动态连接库( *.so )的形式存在,也正由于这样,咱们能够经过复用这些动态连接库从而复用本地代码。php
那么,经过NDK这个开发工具包,那么咱们是否能够将一个APK彻底使用C/C++来编写呢?html
答案是不能够的。众所周知,Android应用程序是运行在Dalvik虚拟机上的。而NDK只开发了部分接口,因此NDK只是容许开发人员经过C/C++实现Android APP的部分功能。因为Android系统自己就是Linux核心,NDK只是负责把这些本地代码编写成能够运行在linux上的动态连接库,从而绕过了Dalvik虚拟机,直接运行在Android平台上了。linux
下载地址: http://developer.android.com/tools/sdk/ndk/index.html#Downloads android
截至2013-12-9为止,也就是我写这篇博客的时候,最新版本为:r9windows
在同一个平台中,下载包有两个,咱们选择下载android-ndk-r9b-windows-x86eclipse
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) 直接把下载到的安装包解压到你想要放的路径;
2) 配置环境变量
I. 新建一个系统环境变量,变量名为ANDROID_NDK_ROOT, 变量值为你的NDK所在的路径,好比个人就是 D:\DevTools\JAVA\adt-bundle-windows\android-ndk-r9b
II. 在系统变量 Path 的最前面添加 %ANDROID_NDK_ROOT%\;
完成上面的步骤以后,NDK的安装到此就完成了,下面咱们来验证一下NDK安装成功与否.
1) 打开cmd.exe,在里面输入ndk-build -version,输出如下内容,表示安装成功。
根据官方文档的说明,从 r7 版本以后,NDK中就多出了一个 ndk-build.cmd,让咱们能够直接在windows下运行啦,若是没有特别需求的话,咱们不再用花费一大堆时间去下载安装Cygwin啦……固然有须要的也能够看下下一篇博文《Android学习——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 如下是执行结果:
CDT是C/C++在Eclipse平台下的开发工具.它提供的功能包括:C/C++编辑器(一些基本的功能:语法高亮显示,代码编辑等),C/C++调试器,C/C++ Launcher,剖析器,内容提示,Makefile生成器等。
若是你们下载的是谷歌提供的ADT 绑定版,那么它已经默认安装好了相应的CDT了,能够忽略该章不阅读,具体咱们还能够经过 Help-> About ADT 进行查看相关信息,如图:
下载地址: http://www.eclipse.org/cdt/downloads.php
该地址上下载的是离线安装包,因为安装包比较大,因此也建议采起这种方式。
注意:不一样eclipse版本要下载对应的包,不然安装不了
那么咱们应该怎么知道咱们的eclipse版本呢?
一样经过Help -> About Eclipse 打开相关信息,如图:
从图中,咱们能够知道本身的Eclipse版本,好比个人是Indigo,而后就到下载地址上根据版本下载相应的便可,好比我下载的是就是 cdt-master-8.0.2.zip
1) 经过 Help -> Install New Software打开一个对话框,点击按钮 add。
2) 在弹出来的对话框中,建议给Name的值为:CDT_版本号;而后点击Archive按钮,定位到咱们下载到的CDT离线安装包
3) 等待安装完成后,重启eclipse后生效
4) 安装完成重启后,在Eclispe中新建一个项目,若是出现了C/C++项目,则代表CDT插件安装成功了
1) 若是Location的下面出现“Duplicate location”错误,请到Window -> preferences -> Install/Update -> Avaliable Software Site中找到remove掉。
2) 若是出现缺乏eclipse包说明你下载的版本和eclipse版本不匹配,从新下载匹配的从新安装就能够了。
Sequoyah插件用于设置Android工程对Native开发的支持,若是安装的是ADT 绑定版的同窗,能够直接阅读 章节2.2.4 NDK的配置
下载地址:http://www.eclipse.org/sequoyah/downloads/index.php#latest
咱们能够从上面的地址中下载离线安装包,具体的安装方法跟上文中的CDT离线安装方法相同,再次不作重复说明。
因为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)的状况,如图:
咱们以NDK中给出的例子hello-gl2为例子进行讲解:
1) 经过Preference -> Android -> NDK ,点击Browser按钮,定位到咱们NDK安装的根目录,如图:
这部分的内容因为篇幅较长,因此另起了一篇博文进行描写《Android学习——windows下搭建Cygwin环境》
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相关设置配置成功了