JAVA开发中,我们经常要用到JNI机制,去调用一些已经实现了的库,以便代码复用,不必重新实现。
NDK(Native Development Kit)。Android 常见开发方式是Java 封装的库,而这些库的底层是由C 或 C++ 实现的。NDK 是Google 公司推出的帮助Android 开发者通过C/C++ 本地语言编写应用的开发包,其包含C / C++ 头文件,库文件,示例代码。目前NDK提供的库函数功能有限,仅仅用于处理那些算法敏感的问题,比如图像处理,大数据量计算等。当然,一些底层本身已经用本地代码实现,我们也可以采用NDK技术运用到Android 开发中来。
网上有很多讨论NDK 和 JNI 的区别的文档,大家可以去看看。但是我认为二者最大的区别在于 NDK 相较 JNI 多了一个 将 .so 文件打包到APK的工具。而JNI 并没有提供打包功能,其只是将 .so 文件放到文件特定位置。而且NDK开发环境提供交叉编译的功能,为确保我们开发的应用能够正确安装在手机上,必须采用对应ARM架构来编译,因此,在PC端开发必须采用交叉编译工具。NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CPU、平台、ABI 等差异,开发人员只需要简单修改mk 文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK 可以自动地将so 和Java 应用一起打包,极大地减轻了开发人员的打包工作。比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码。
工欲善其事必先利其器,下面介绍下 NDK Cygwin CDT 集成开发环境的搭建。
一、Cygwin 安装
1、官网下载Cygwin,安装。
注意: 安装过程中选择镜像站点。选择要下载的站点,我用的是http://mirrors.kernel.org/,速度感觉还挺快,选择后点下一步。
选择要下载的包的名称。为了避免全部下载,这里列出了后面开发NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc-g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包。
2、安装好后。运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。 然后依次输入gcc –version,g++ --version,make –version,gdb –version进行测试,如果都打印出版本信息和一些描述信息,非常高兴的告诉你,你的cygwin安装完成了!
二、配置NDK环境变量
下载 android-ndk-r8b-windows.zip 解压放到 e 盘根目录下,具体配置过程如下:
1、首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile。
有时候会碰到home文件夹下没有子文件的情况。这时,直接 cp /cygwin/etc/skel/.bashrc ~ 即可。查看下 ~ 对应目录。
2、打开bash_profile文件,添加NDK=/cygdrive/<你的盘符>/<android ndk 目录> 例如:
NDK=/cygdrive/e/android-ndk-r8
export NDK
(NDK 这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存)
3、打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/e/android-ndk-r8信息,则表明环境变量设置成功了。
三、用NDK来编译应用程序
1、 现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于E:\android-ndk-r8\samples\hello-jni(根据你具体的安装位置而定),
2、 运行cygwin,输入命令cd /cygdrive/e/android-ndk-r8/samples/hello-jni,进入到E:\android-ndk-r8\samples\hello-jni目录。
3、 输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)
4、 此时去hello-jni的libs目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
生成之后,这时候可以再用ndk的samples里边的例子生成eclipse工程了.
四、Eclipse 安装CDT 插件
去Eclipse 官网查看CDT 插件,发现其提供两种安装方式。
1、直接下载安装包
2、在线安装
我们选择在线安装方式,在Eclipse ——》Help ——》 Install 选项中,添加地址http://download.eclipse.org/tools/cdt/releases/juno ,安装完毕,OK!
五、配置Eclipse 中工程可直接编译C/C++代码成库文件并构建整个android 工程
这个需要在Properties ——》 Builders 中进行设置,这样每一个工程都得设置,个人感觉过程还是比较麻烦,还不如就直接开发好C代码,编译成SO库文件后,然后再倒入JAVA工程中。大家有兴趣的话,去网上GOOGLE下,照着做就OK了,这里不再赘述。
参考方法地址:http://www.cnblogs.com/luxiaofeng54/archive/2012/03/13/2136982.html