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开发环境的更多相关文章

  1. Windows下搭建Android NDK开发环境及命令行编译

    首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...

  2. 如何在Ubuntu下搭建Android NDK开发环境

    1 搭建Android SDK开发环境 参考在在Ubuntu下搭建Android SDK开发环境(图文)首先在Ubuntu下搭建Android SDK开发环境. 2 下载NDK开发包 打开官网: ht ...

  3. Window环境下搭建android NDK开发环境

    1.下载ndk和cygwin NDK 下载地址:http://developer.android.com/tools/sdk/ndk/index.html Cygwin 下载地址:http://cyg ...

  4. linux下搭建android NDK开发环境

      1)下载android-ndk-r4 下载地址 http://www.ideasandroid.com/android/sdk/android-ndk-r4-linux-x86.zip http: ...

  5. [转载]在Windows下搭建Android开发环境

    http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html 在Windows下搭建Android开发环境 | 浏览:30780 | 更 ...

  6. Windows下搭建Spark+Hadoop开发环境

    Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...

  7. Windows下搭建objective C开发环境

    摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...

  8. windows下搭建nginx+php开发环境

    windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...

  9. Windows XP环境下 搭建Android NDK环境

    搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...

随机推荐

  1. 安装arcgis10.5不能启动服务的解决方案转

    柚子的二分口粮地 来自:http://www.cnblogs.com/youzi-xuchongyou/p/7218422.html 安装arcgis10.5不能启动服务的解决方案 最近由于公司需要, ...

  2. 几款开源的ETL工具及ELT初探

    ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL 是构建数据仓 ...

  3. VMware+Windgb+Win7内核驱动调试

    com1被占用了,需要用com2

  4. MySQL中limit的用法

    SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset   LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.L ...

  5. std::tr1::function

    转自:https://www.cnblogs.com/qlee/archive/2011/07/04/2097594.html 在C++的TR1中(Technology Report)中包含一个fun ...

  6. JDBC 通过PreparedStatement 对数据库进行增删改查

    1 插入数据 public boolean ChaRu3(User user){ boolean flag=true; Connection conn=null; PreparedStatement ...

  7. iOS开发-NSPredicate

    Cocoa中谓词(Predicate)提供了一个通用的查询方式处理数据,可以获取和指定数据的过滤形式,Cocoa实际开发中可以是使用NSPredicate及其父类NSComparisonPredica ...

  8. 比较windows phone 的回退事件与android的回退事件

    public void onBackPressed() { finish(); } 如果要做一个页面导航的功能的话,就我而言,认为,windows phone开发比android更加人性化,更加傻瓜化 ...

  9. phpcms pc标签 start不生效的原因

    start 和 page 参数不可同时使用,使用了page参数 会造成start 参数无效

  10. [Node.js]26. Level 5 : Route rendering

    Instead of just writing out the quote to the response, instead render the quote.ejs template, passin ...