一、认识Cygwin、NDK和jni
首先来认识一下什么是Cygwin、NDK和jni。
Cygwin:Cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。本文就是要用Cygwin模拟Linux环境,使用NDK中的编译工具,来编译jni程序。
NDK:谈到NDK,想必大家都会想到SDK(Software Development Kit, 即软件开发工具包 )。SDK一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK自然就是开发Android程序时使用的软件开发工具包。NDK的全称是Native Development Kit,android NDK官网上是这么说的"The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++。"意思是说,NDK是一套用来帮助我们在程序中添加C/C++代码的工具集合。通常,我们使用NDK中的编译工具来将C/C++代码编译成库文件。
jni:JNI是Java Native Interface的缩写。jni是为了让java能够调用本地已编译代码(尤其是C和C++)而设计的,只要调用约定受支持,也可以调用其他代码就可以了。
二、为什么要使用jni
使用jni通常有两种原因:一是为了提高程序效率,程序的核心部分使用C/C++开发,而UI部分使用java开发,通过jni调用核心代码,例如一些游戏、视频图像处理软件。二是为了复用已经开发好的稳定模块,提高开发效率。
三、如何使用jni
如何将Cygwin、NDK、jni三者联系起来呢?方法如下:使用Cygwin在windows上模拟Linux环境,在这个环境里使用NDK里的编译工具,将写好的、符合jni规范的C/C++代码(或者其他代码)编译成库文件,然后java程序就可以调用库中的函数了。所以现在有如下三个问题:①安装、使用Cygwin。②安装NDK。③了解jni编程规范。