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

本专栏的前面几篇博客写了一些Android下通过JNI进行NDK开发的基础知识,主要步骤在里面也写的很清晰,但是看起来比较麻烦,为什么呢?可能细心的朋友会发现我每次在进行交叉编译的时候,是通过cygwin模拟Linux环境用ndk-build命令进行编译的,而且每次新建JNI工程的时候,都会在工程目录下手动的新建一个jni的目录,在该目录下新建C源码文件和Android.mk配置文件,这一系列的操作显得特别繁琐,尤其是cygwin,首先其下载安装是个非常耗时耗力的操作,其次使用cygwin还需要理解Linux的一些命令。


1,ndk-build.cmd环境配置

除了这些繁琐之外,还有其它一些“不方便”的地方,下面会说到,首先说明的一点是,本人在以前学习NDK开发的时候,是基于ndk_r7的版本的,那会开发NDK可能必须得在Linux环境下完成交叉编译,但是在ndk_r8版本以后,Google也意识到很多Android程序员是在Windows环境下进行开发的,所以在r8版本之后,ndk开发包中开始提供了基于Windows开发的一些配置文件和DOS命令行的批处理文件,下面就是最新版本android-ndk-r10d的解压目录部分截图:


红色框框圈中的ndk-build.cmd就是r8版本以后给我们Windows开发人员提供的在DOS命令行下开发的NDK的一些批处理命令,有了这个后,我们在NDK开发的时候,就不必再安装烦人的cygwin了,也不用在cygwin下进行交叉编译了,而是可以直接在Windows命令行下进行编译.so文件,使用ndk_build.cmd需要配置windows环境变量,将ndk_build.cmd配置在Path变量中,此过程类似于配置JDK,具体步骤不再详述。

桌面上右键点击“计算机” --> 属性--> 高级系统设置--> 环境变量--> 选择Path点击编辑--> 将ndk解压路径复制粘贴到变量值后面


打开Windows命令行,输入ndk-build,回车,若出现如下图所示就说明环境配置好了,可以使用ndk-build命令在Windows下进行开发了。



2,Eclipse环境配置

做完Windows的配置之后,我们最好还是需要配置一下Eclipse下的NDK路径,这样我们编译.so文件的时候甚至都不用Windows命令行了,直接在Eclipse下进行编译。

在eclipse --> window -->perference --> Android --> NDK标签中指定NDK所在的目录(只需要执行一次)



3,使用Android Tools->Add Native Support

做到这一步,我们先来新建一个Android工程,为这Android工程自动的添加JNI支持。

工程上右键 --> Android Tools --> Add Native Support,在弹出的对话框中输入编辑的C/C++的文件名,确定之后,可以看到工程下自动创建了一个jni和obj目录,并且jni目录下自动生成了一个.cpp的C++文件,我们需要改成.c的文件,还有一个Android.mk被自动生成了,我们也需要改LOCAL_SRC_FILES为.c的C文件。



4,关联源码

在前面的几篇博客中,只要在Eclipse中打开C文件的源码时,会发现很多黄色的小线条,弄的人比较恼火,而且C文件的类库源码是没有关联的,我们按下Ctrl键用鼠标点击源码的时候并没有出现源码,那么在高版本的ndk发布后,这些操作只是简单的在Eclipse下设置就好了。

工程点击右键 --> properties --> C/C++ General --> Paths and Symbols右侧点击add按钮 -->点击File System --> 选择android-ndk-r9b\platforms\android-19\arch-arm\usr\include,一直到include目录为止 --> ok


打开C源码查看一下,发现恼人的黄线没有了,然后在方法或者头文件处Ctrl+右击,源码也弹出来了,方便多了。


5,编写Java的Native方法,编写C实现源码

做到这步都是要实现我们需要的功能了,具体步骤跟以前介绍的都差不多,这里不再详述了,有兴趣了解的话,请查看我们前面的博客Android NDk开发——从Hello World学起,本次编写的代码跟上篇博客的代码是一模一样的,没必须再重新写一遍了。需要注意的是,经过上述的配置,这次编写C代码的时候就有了代码提示了,哈哈,是不是一下子变得高级多了啊?



6,编译动态链接库

通过上述步骤,我们的代码已经写好了,这时候是需要将编写好的代码进行交叉编译成.so文件的,该怎么做呢?回想以前的做法,打开cygwin,输入Linux命令切换到工程目录下,输入ndk-build进行编译?还是打开cmd命令下窗口,切换到工程目录下,输出ndk-build?以上通通都不用,为什么呢?因为我们刚刚在properties里设置好了NDK编译环境,所以这次我们可以直接在Eclipse上完成交叉编译的工作。

Eclipse右上角找到Open Perspective --> 选择C/C++视图 -->在视图的右上角点击“小锤子”按钮,即可在Eclipse下交叉编译了。



编译后



在工程下发现


好了,做到这一步就说明我们已经成功完成了Native代码的交叉编译工作了,剩下的就是编写Java代码去调用了。


怎么样,以上的NDK开发步骤是不是比前面几篇博客里介绍的手动开发步骤要简单的多啊?!而且还省略了cygwin的下载和安装以及使用,最后代码中的小黄线没有了,编写C代码也有了代码提示,还可以关联源码,简直方便到了极点!那么以后我们在开发JNI程序时就应该采取这样简便的方式了,这篇博客介绍到此为止了,希望看过博客的朋友提出修正意见,谢谢!


更多相关文章

  1. Android(安卓)Material Design动画 Animated Vector Drawables|
  2. Android(安卓)文件上传
  3. Android(安卓)ROM开发之预制GMS
  4. Android中读图片Exif信息的方法
  5. 基于Android(安卓)5.0的源码编译过程
  6. android 4.2 compile on 64 bits Ubuntu
  7. Android(安卓)JNI和NDK有什么区别
  8. [android] 获取网页中的HTML数据
  9. 使用Eclispe进行Android系统应用的开发和调试

随机推荐

  1. 可以使用不同文本框编辑的不同弹出窗口?
  2. JavaScript实现简单的四则运算
  3. 如何在JavaScript / jQuery中获取对象的
  4. Android平台上的QWebView HTML5地理定位
  5. 如何使用变量创建数组?
  6. 迭代angularjs中对象中的属性列表
  7. js和php时间戳的问题
  8. 如何在Safari浏览器中禁用Ajax缓存?
  9. 网站性能优化:Cache为王篇
  10. 我在显示随机选择的对象时遇到问题