Android NDK开发(七)——现代化开发方式

本专栏的前面几篇博客写了一些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程序时就应该采取这样简便的方式了,这篇博客介绍到此为止了,希望看过博客的朋友提出修正意见,谢谢!

时间: 2024-08-14 21:22:44

Android NDK开发(七)——现代化开发方式的相关文章

Android NDK开发初识

神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理,通过在线视频教育网站,我初步了解了NDK的神秘面纱,好东西自然要分享,接下来我们就一起来认识一下Android NDK开发. 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三

windows下用ADT进行android NDK开发的详细教程(从环境搭建、配置到编译全过程)

郑重申明:如需转载本博客,请注明出处,谢谢! 这几天在学习android NDK的开发,那么首先让我们来看看android NDK开发的本质是什么. NDK(Native Development Kit),即本地开发工具,简单地说,就是在开发android应用程序的时候,在java类中调用native函数,而native函数的接口也是在java类中定义的,但是native函数最终由本地的C/C++代码实现.简单地说,就是在java中调用C/C++函数.至于为什么要用NDK,我总结了一下,大致有以

Android NDK开发(六)——使用开源LAME转码mp3

转载请注明出处:http://blog.csdn.net/allen315410/article/details/42456661 在本专栏的前面几篇博客中讲述了一些Android NDK开发的基础,从环境搭建一直到利用JNI进行Java端和C端代码的互相调用,并且的讲解的Demo也是很简单易懂的,相信掌握前面博客的大部分内容,就可以着手在实际项目中利用JNI进行NDK开发了,那么既然基础过了,接下来我在这里尝试去使用真实项目中去.我们知道,C语言因为高效,而且又是最早期的高级编程之一,一直存活

Android NDK开发篇(五):Java与原生代码通信(数据操作)

尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用Java的引用类型则要做对应的处理. 一.对引用数据类型的操作 尽管Java的引用类型的实如今NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法改动和使用Java的引用类型. 1.字符串操作 JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,须要相

Android NDK 开发(三)--常见错误锦集合Log的使用【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误,很多时候调试这些错误的时候,显得比调试Java代码要复杂,一方面是导致错误的原因很多很杂,另一方面NDK开发涉及到C/C++代码的编写,很多程序员对此不熟悉.那么这篇博客就总结一下,在NDK开发中经常出现的一些问题,并且尝试提供一些正确的解决方案,方便在开发时能够快速定位到错误,更改错误,当然了,错

Android NDK 开发

NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.这些工具对开发者的帮助是巨大的. * NDK集成了交叉编译器,并提供了相应的mk文件隔离平台.CPU.API等差异,开发人员只需要简单修改mk文件(指出"哪些文件需要编译"."编译特性要求"等),就可以创建出so. * NDK可以自动地将so和Java应用一起

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 NDK 开发(四)java传递数据到C【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处理和从第一个Hello World开始实际做一个简单的JNI开发示例,相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层“协议”在Java和C之间起个“桥梁”的作用,将Java和Native C之间联立起来,让Java

跟我学Android NDK开发(一)

Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? NDK(Native Development Kit) 是一个允许开发者用一些本地语言(C/C++)编写 Android App 的部分功能的工具集.对于一些特定的 App,NDK 非常有利于我们直接使用现成的用 C/C++ 编写的代码库(但对于大多数 App 来说,NDK 是没有必要的).使用