首页 技术 正文
技术 2022年11月14日
0 收藏 464 点赞 4,758 浏览 3066 个字

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955

Android下的NDK开发是Android开发中不可或缺的一部分,通过Google提供的NDK套件,我们可以使用JNI这座桥梁在Java和C/C++之间建立联系(互相调用)。那么,为什么在Android开发中需要了解NDK开发呢?诚然,这些原因有很多说法,在我总结来是这样的。C/C++是比Java还要古老的编程语言,由于其古老的特性,导致早期有很多优秀的类库出现,譬如处理视频编解码的FFMPEG类库,这些复杂的类库早就被C/C++编写过,我们在处理视频编解码的时候没必要重复“造轮子”,所以能直接拿来用的就直接拿来用,但是这个直接法很难做到,因为Java的编译环境的原理跟C/C++的不同,所以就必须找个中间者为Java和C/C++代码建立关系,这个中间者就是JNI。还有一个重要的原因就是效率问题,Java是跨平台的语言,在不同的平台有不同的JVM实现,Java源码需要首先编译成.class文件,然后让.class文件运行在不同的JVM解释执行上,这样的步骤造成了效率的浪费,而不同的是C/C++,可以直接编译成特定平台的二进制文件,直接运行在特定平台上,效率比Java高效很多,所以在某些特定的环境下,还是需要使用C/C++来解决效率问题,Java只负责处理C/C++返回来的结果就可以,这样的话Java和C/C++互调就显得相当重要了。

做NDK开发前最好需要了解一下C/C++的语法,通常这部分的代码不需要Android程序员编写,但是Android程序员最好能看懂C/C++源码,这样做会事半功倍一点,关于C/C++语法的学习不是这里的重点,大家感兴趣的话可以直接找资料学习,请从柜底抽出大学教材《C语言程序设计——谭浩强》,拍拍上面的灰尘,随便过一遍^.^

一、明确一些基本概念

1,JNI

Java Native Interface Java 本地开发的接口。JNI 是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)。通过这个协议,java代码就可以调用外部的c/c++代码,外部的c/c++代码也可以调用java代码。

Android NDK 开发(一)–环境搭建【转】Android NDK 开发(一)–环境搭建【转】

2,CDT

C/C++ Develop tools,C/C++开发工具。是Eclipse上的一个插件,主要是让C/C++代码能够高亮显示。这个组件不是必要的,除非你是C/C++高手,喜欢在记事本上写代码,对于一般的程序员还是装一下吧,高亮显示很重要的。

3,NDK

Native Develop Kits,本地开发套件。这个套件是非常重要的,是Google提供给我们的一个在Android上开发JNI程序的工具集,有了它会使得开发高效的多。

4,cygwin

Windows下的Linux模拟器。大家知道Android是基于Linux内核的操作系统,所以在编译C/C++源码的使用得使用Linux环境,将其编译成Linux特定平台的文件.so或者.a。好消息是,NDK高版本中提供了Windows下开发套件的支持,cygwin可以不使用,直接在Windows下平台编译也是可行的,但是为了显示学习,最好还是需要了解一点的。

二、NDK环境搭建

1,安装CDT

      如果是使用的是从Android Develop官网上下载的集成了ADT一整套的IDE的话,请跳过这一步,因为ADT中已经集成好了CDT插件,直接使用就可以了。如果使用的是传统的Eclipse自装插件的方式的话,有两种方式可供安装CDT。(1)下载CDT插件进行安装。在Eclipse社区官网可以找到下载链接https://eclipse.org/cdt/。(2)在线安装。步骤如下:打开Eclipse工具栏Help–>install new softwareAndroid NDK 开发(一)–环境搭建【转】

选择 Helios- http://download.eclipse.org/release/helios ,等待展开,选择Programing language

Android NDK 开发(一)–环境搭建【转】  

选择c/c++ 开发工具

Android NDK 开发(一)–环境搭建【转】

一路next下去,同意licenses。

安装成功会提示是不是确认重启eclipse,重启就完成安装。

2,安装cygwin

NDK需要运行在linux环境下,cygwin是windows下模拟linux的一个工具。Cygwin是一个程序,支持很多插件。可以去cygwin的官网上下载http://www.cygwin.com/双击安装,也可以从CSDN资源页上下载我上传的资料包,里面包含cygwin的安装程序和安装包,地址是:http://download.csdn.net/detail/lee_tianya/8235323

Android NDK 开发(一)–环境搭建【转】

        选择安装方式请注意了,一般可以选择从Internet上在线安装,不过速度很慢,而且中途不能断开,如果网速不好中途断开了,那么就必须从头开始下载,非常不舒服。第二种方式是本地安装,先下载好安装所需要的文件放在本地磁盘上,然后选择安装目录即可,我这里是本地安装。Android NDK 开发(一)–环境搭建【转】 选择安装目录的时候请注意:安装目录不可以出现空格,最好不要出现中文等非英文字符。Android NDK 开发(一)–环境搭建【转】Android NDK 开发(一)–环境搭建【转】Android NDK 开发(一)–环境搭建【转】Android NDK 开发(一)–环境搭建【转】 

安装完毕后 ,桌面会出现一个快捷图标,双击快捷小图标,打开cygwin。

首先程序会初始化

Android NDK 开发(一)–环境搭建【转】

敲入命令

Make –v

Android NDK 开发(一)–环境搭建【转】

显示出来 GNU Make 的版本 ,说明我们的cygwin模拟的linux编译环境 模拟成功了.

3,安装NDK

首先FQ上Google Android Develop的官网去下载NDK,地址是http://developer.android.com/tools/sdk/ndk/index.html

Android NDK 开发(一)–环境搭建【转】

 

我这里选用的Windows版本64位的r10d版本的ndk,是当前最新版本,android-ndk-r10d-windows-x86_64.exe,下载完成后点击exe文件,会自定解压到当前目录下,这个过程比较漫长,可见升级造成安装的过大啊,好,解压完毕之后我移动E:/NDK目录下了。

做完上面的一些步骤后,环境基本上是搭建完成了,现在我们使用cygwin模拟Linux环境下,进入Windows路径E:/NDK/android-ndk-r10d下,执行ndk-build脚本。

第一步:进入根目录找到根目录下的cygdrive文件,该文件对应的是Windows下的所有盘符:

Android NDK 开发(一)–环境搭建【转】

第二步:进入ndk所在目录:

Android NDK 开发(一)–环境搭建【转】

第三步:执行ndk-build脚本

Android NDK 开发(一)–环境搭建【转】

通过上面的步骤,我们就可以使用ndk-build脚本了,但是这样的过程是在是太繁琐了,使用起来是非常的不方便,那么下面我们来使用一下简便的方法吧,配置文件。

为了方便直接在命令行里面使用ndk-build,需要给cygwin的环境变量里面添加ndk的目录

首先

我们在cygwin安装的目录下找到etc/profile文件,这个文件就是cygwin的配置文件,用记事本打开这个文件,找到如下一行:

Android NDK 开发(一)–环境搭建【转】

然后

我们在cygwin的控制台上找到ndk的解压路径

Android NDK 开发(一)–环境搭建【转】

接下来

我们复制这个路径到Path中,注意Linux环境变量中的路径分割使用英文冒号“:”来区分

Android NDK 开发(一)–环境搭建【转】最后       检测是否配置完成,在cygwin控制台下输入“ndk-build”命令Android NDK 开发(一)–环境搭建【转】若命令行显示的是如上图所示的信息,说明配置完成了,可以使用了,若不是这种情况,请根据文章的描述再进行一次配置。         好了,NDK开发中的环境搭建到此就结束了,下面就可以使用NDK环境来开发了,关于NDK开发,后续的文章会慢慢介绍。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,494
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297