这几天一直在学习搭建Android NDK开发环境,网上的教程虽然一大堆,但是很多都是使用Cygwin来做的,以前下载过Cygwin,那个安装速度真的是...怎一个蛋疼了得,后来查到可以不用安装Cygwin就搭建NDK环境,直接安装ADT+CDT,然后使用NDK包,这里我说一下我用到的各种工具:

1.Eclipse:eclipse-java-luna-R-win32

2.ADT:ADT-20.0.3.zip

3.CDT:这个不用单独下载,在上面的ADT中就自带了NDK插件

4.NDK:android-ndk-r8b

下面我详细说一下我搭建NDK开发环境的过程,希望能给还没有搭好开发环境的人一点帮助。

下载好Eclipse后直接打开,然后来到Help--->Install New Software...如下图所示


在打开的对话框中,选择Add--->Archive...,如下图所示


然后在这里选择我们之前下载好的ADT-20.0.3,选择好了文件之后,如下图所示:


然后OK,进入下面的图,大家可以看到,ADT-20.0.3的包里面自带了NDK,选择select all,然后一直next下去,这里由于我已经安装了,所以显示All items are installed

一直next下去后会提示重启eclipse,重启完成后安装ADT就告一段落。


在重启Eclipse后,我们打开Window--->Preferences,如果出现下面的选项,那之前的安装应该就没问题了


下面我们开始新建Android工程:这里我新建的Android工程名为FirstNDKTest,如下图所示:


新建好了Android工程后,我们在工程上右键--->Android Tools--->Add Native Support...,如下图所示:


我们使用默认的名称,直接finish,如下图:


finish之后,我们会发现Android工程的目录下,多了一个jni目录,里面有两个文件,如下图所示:


这里的cpp文件,我们需要在里面实现Java中的native方法,从而让Java调用,我们直接打开上面的FirstNDKTest.cpp文件,如下图所示:


我们可以看到,上面的文件中只有一行代码,即引入头文件,这个地方报了一个错误:Unresolved inclusion: <jni.h>,这是因为我们没有包含相应的文件的缘故,

接下来我们在Android工程上右键--->New--->Folder,在打开的对话框中选择Advanced--->Link to alternate location(Linked Folder)--->Browse,然后选择我们下载好的android-ndk-r8b中的platforms\android-14\arch-arm\usr\include子目录,如下图所示:


将上一步选择的目录加入到工程中来了之后,我们关闭之前打开的cpp文件,然后再次打开它,是不是没有报错了

接下来我们在Java代码中使用native方法,这里为了简单起见,我们就在屏幕上输出一行文字,其中的文字由native方法提供,我们在Android工程的MainActivity方法中添加如下代码:


上面的代码不用多解释了吧,就是从native方法中得到String对象,然后显示在TextView中,要注意的一点是,我们在静态代码块中使用了System.loadLibrary()方法,而不是System.load()方法,并且方法中的参数为FirstNDKTest,不需要加上前缀和后缀,这里的前缀和后缀,在下面我们Build Project的时候,大家就可以看到了。

接下来我们Build Project,方法是在Android工程上右键--->Build Project,如果前面没有出现任何问题的话,我们会发现在Android工程中出现了两个目录,如下图所示:


这里新生成了libs和obj目录,且目录中多了一些文件,其中就有libFirstNDKTest.so文件,这就是动态链接库文件了,上面我们说的前缀和后缀,就是这里的lib和.so,我们在Java代码中加载动态链接库文件时,不能写文件的全名libFirstNDKTest.so,而是去掉前缀和后缀剩下的FirstNDKTest,这里希望大家注意。

接下来我们要开始写C++代码了,我们打开FirstNDKTest.cpp文件,在里面添加代码如下图所示:


需要注意的地方已经在注释中写明了,到这里,我们就基本上算是完成了一个使用NDK开发的Android应用,接下来我们运行它,右键--->Run As--->Android Application

可以看到模拟器中的运行情况了:


终于出现了,高兴吧~

以上就是我搭建NDK开发环境的详细过程,其中也出现了很多问题,在网上都找到了相应的解决办法,希望这篇博文能给大家带来帮助,如需转载,请注明出处:

http://blog.csdn.net/yubo_725/article/details/38614691


更多相关文章

  1. 反编译APK 得到JAVA代码和资源文件源码
  2. JSP页面中有一个按钮 点击之后执行JAVA文件
  3. 如何在Java中递归解压缩文件?
  4. Java获得文件的创建时间(精确到秒)
  5. 安卓Android文件上传Demo报错 java.io.FileNotFoundException: /
  6. Eclipse创建的包变成文件夹的解决方法
  7. Android 多线程下载文件原理霸气解析介绍 (完结版)-----greendao
  8. [java混淆器问题] 如何让web项目的class文件不能被反编译,又能在w
  9. eclipse写javaweb工程时文件目录为WebContent而不是WenRoot的不

随机推荐

  1. java实现定时备份mysql数据库-----已通过
  2. mysql 自增列id 最大为多少 一直insert会
  3. MySQL的事务隔离级别以及设置
  4. MySQL---数据库从入门走向大神系列(三)-
  5. 阿里云服务器远程连接mysql
  6. 迁移外键与Laravel中雄辩的关系
  7. MySQL] 行列转换变化各种方法实现总结(行
  8. 【Java Web】简易商品信息管理系统——首
  9. oracle、mysql、db2三大数据库分页方法的
  10. MYSQL安装--小白教程