C++开发安卓、windows下搭建Android NDK开发环境
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相关设置配置成功了
C++开发安卓、windows下搭建Android NDK开发环境的更多相关文章
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- 如何在Ubuntu下搭建Android NDK开发环境
1 搭建Android SDK开发环境 参考在在Ubuntu下搭建Android SDK开发环境(图文)首先在Ubuntu下搭建Android SDK开发环境. 2 下载NDK开发包 打开官网: ht ...
- Window环境下搭建android NDK开发环境
1.下载ndk和cygwin NDK 下载地址:http://developer.android.com/tools/sdk/ndk/index.html Cygwin 下载地址:http://cyg ...
- linux下搭建android NDK开发环境
1)下载android-ndk-r4 下载地址 http://www.ideasandroid.com/android/sdk/android-ndk-r4-linux-x86.zip http: ...
- [转载]在Windows下搭建Android开发环境
http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html 在Windows下搭建Android开发环境 | 浏览:30780 | 更 ...
- Windows下搭建Spark+Hadoop开发环境
Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...
- Windows下搭建objective C开发环境
摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...
- windows下搭建nginx+php开发环境
windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...
- Windows XP环境下 搭建Android NDK环境
搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...
随机推荐
- 判断一个请求是否为Ajax请求
这几天在写一个网站的登录判断拦截器,需要对请求进行拦截,在拦截器中我需要判断HttpServletRequest是否为Ajax异步请求.我们可以通过X-Requested-With="XML ...
- PHP SQL防注入
过年前后在做一个抽奖的东西,需要用户填写中奖信息,为了防止非法用户对数据库进行入侵神马的,于是写下基本的防注入语句,需要用的可以自己封装成一个function. $str = str_replace( ...
- springboot 注入 restTemplate
手动实例化,这个我基本不用 RestTemplate restTemplate = new RestTemplate(); 依赖注入,通常情况下我使用 java.net 包下的类构建的 SimpleC ...
- strncpy实现
#include<stdio.h> char *my_strncpy(char *dest,char *src,int n) { int i; ;i<n && src ...
- IIS6.0支持PHP设置
找到了一份兼职,做网站的,但是公司里面服务器是用的IIS,Win2003系统,而且以前的网站都是aspx的.老板是我们学校的一个老师,我是被学长推荐过去了. --------------------- ...
- 用C语言获取任意文件的长度(可能大于2GB)
用C语言获取文件长度的常见思路是: 打开文件后用 fseek() 函数把文件位置指针移动到文件的末尾,用 ftell() 获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.但是这样做也会受到 ...
- ListView 设置列对齐方式
<ListView.Resources> <Style TargetType="ListViewItem"> <Setter Property=&qu ...
- 转: telnet命令学习
1.每天一个linux命令(58):telnet命令 转自: http://www.cnblogs.com/peida/archive/2013/03/13/2956992.html telnet命令 ...
- 移动立方体算法(Marching cubes algorithm)
百度百科: 医学图像三维重建的方法主要有两大类:一类是三维面绘制,另一类是三维体绘制.体绘制能够更真实地反映物体结构,但由于其运算量大,即使利用高性能的计算机也无法满足实际应用中交互操作的需要.因此, ...
- 向量的表示及协方差矩阵 (PCA的理论基础)
原文:http://blog.csdn.net/songzitea/article/details/18219237 引言 当面对的数据被抽象为一组向量,那么有必要研究一些向量的数学性质.而这些数学性 ...