android之NDK开发

来源:互联网 发布:java毕业设计题目 编辑:程序博客网 时间:2024/06/02 09:26

NDK是(native development kid)的缩写,我觉得很多文章上面都没有交代清楚何为NDK,作为一个开发者,了解它是很必要的。我的理解是:java是跨平台的语言,采用面向对象的编程思想,很多时候需要用到C代码,这个时候就需要调用C的函数了。在NDK开发中所说的本地代码就是c代码,纯粹采用c语言的规范编写。编写之后要编译成二进制动态库代码,以供java代码调用,在java中就可以调用c函数了。不仅如此,在本地代码中亦可以调用java代码并修改其属性。

1、java代码

在java代码中,首先声明本地代码函数。用navie声明,然后进入工程所在目录,进入bin目录(这里采用eclipse编程,如果不是采用eclipse1编程,则进图class文件所在目录),javah+完整包名加类名,就可以生成相应的本地头文件。javah是sun公司提供的工具,具体调用格式可以参考帮助(cmd-->javah -help)。然后打开vc6.0(也可以使用更加高的版本),新建dynamic link library(DLL),拷贝并导入刚才生成的头文件,再新建cpp文件(这里如果新建c文件vc6.0要报错),实现头文件中的函数,函数的参数书按照JNI格式编写的,如果你不知道什么叫做jni,可以参考其他文献。在java目录中找到jni.h及其相关的另外的头文件,然后编译,生成dll文件(在debug文件夹中)。dll文件和exe文件一样,都是二进制的可执行文件,将此文件拷贝到java工程目录,在java工程中就可以调用本地函数了。

2、android代码

android代码虽然也是采用java格式编写,但是所使用的编译器和java不同,想上面的dll文件,在这里就不可以调用了,android代码调用的二进制库是以.so结尾的动态链接库,以linux内核编译而成。带式在windows中怎么调用linus内核对代码编译呢,这就要依赖于cygwin工具了,cygwin工具等于在windows本地模拟了一个linux内核,可以对c代码编译。对它的下载和安装请参考相关文档。对于具体编写本地代码和上面的方法相同,而对于jni语法规则,可以参考相应帮助文档。在ansroidNDK包中为我们配置了编译本地代码的linux命令集合,代码放在根目录的ndk-build中,执行如下:编写完本地代码之后,在cygwin中进入工程所在目录,然后执行(NDK根目录)/ndk-build,就可以编译本地代码了,后面的操作和java代码调用本地代码相同。

执行本地代码是开发opencv的基础,对于opencv的开发,本人正在研究中。

 

原创粉丝点击