NDK概述
NDK全称:Native Development Kit。
1、NDK是一系列工具的集合。
* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK提供了一份稳定、功能有限的API头文件声明。
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。
NDK带来什么
1、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。
使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)
2、NDK将是Android平台支持C开发的开端。
NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。
NDK环境搭建说明
以下操作基于:Windows7 + Android-ndk-r8b-windows + Cygwin DLL is 1.7.16-1
第一步:下载NDK安装包
下载地址:http://developer.android.com/tools/sdk/ndk/index.html
选择android-ndk-r8b-windows.zip下载
第二步:下载并安装Cygwin
当前版本是:Cygwin 1.7.16,下载地址:http://www.cygwin.com/
下载在线安装程序setup.exe(688KB),下载后运行,界面如下:
(图1:安装初始界面)
(图2:选择安装的方式,默认用在线网络安装,也就是第一项;第二项是只下载不安装;第三项是从本地安装;)
(图3:选择安装目录,以及可使用的用户群,安装目录此处选择D:\Cygwin)
(图4-1:安装包存放路径,默认是C:\Windows\system32目录,此处改为D:\Cygwin\system32)
(图4-2:安装包存放路径,此处改为D:\Cygwin\system32)
(图5:网络连接方式)
(图6:选择下载镜像站点)
(图7:在下载时弹出一个提示,点“确定”即可)
(图8-1:下载后会提示你选择需要安装的安装包)
(图8-2:编译NDK,需选择Devel(点击列表中Devel,将后面的Default改为Install,图中箭头所示),其它均为默认状态。)
(图9:等待下载安装)
(图10:安装完成)
友情提醒:安装完成后,最好把下载的包目录做个备份,本文包存放路径是D:\Cygwin\system32,下次安装同样的环境可以直接使用离线安装方式(参考图2)。
第三步:验证Cygwin环境
安装完成后,运行一次Cygwin安装目录下的Cygwin.bat,
分别输入:
make -v
和,
gcc -v
如果检测成功,会有make和gcc相关版本信息打印出来,如下图。
第四步:配置NDK路径设置
可以在cygwin中通过vim修改,也可以在Cygwin安装目录中修改 home\<你的用户名>\.bash_profile 文件中最后添加环境变量
NDK=/cygdrive/d/android-ndk-r8b
export NDK
其中NDK=/cygdrive/<你的盘符>/<android ndk 目录> ,"NDK"这个名字随便起,以后经常用不要太长。
重启cygwin,输入:
cd $NDK
可进入ndk对应目录说明设置OK。
第五步:编译演示工程
现在就可以编译相关NDK工程了(一些用c/c++写的程序),编译方法如下:
1、在cygwin命令行下,进入android项目工作目录:
cd $NDK
2、依次进入samples\hello-jni目录,(完整路径示例: D:\android-ndk-r8b\samples\hello-jni)
3、运行
$NDK/ndk-build
注意:该命令$NDK和/ndk-build是连接到一起的,中间没有空格,实际使用时是打入完整的$NDK/ndk-build,不要只打ndk-build。
4、正常编译完成后会在你的项目libs/armeabi目录下生成对应的 .so文件。
第六步:导入静态目标库到Android项目
编译完成后会得到*.so静态目标库后,就可以导入工程环境Eclipse Android项目中使用,注意,NDK编程并非一定要把这个目标库导入Android项目使用,除了本步骤描述的使用方法之外,还有Android源码直接修改、编译,然后烧录到测试机的开发方式,那样可以实现应用程序默认安装、权限开机提升等等更“彻底”的功能。综合一下:
本步骤演示属于NDK目标库+Andriod APK样式,此外还有Android源码直接开发、直接编译方式(确切一点已经淡化Android所谓的工程概念了,当然源码开发目前似乎还无法直接在Windows下进行,好像必须使用Linux家族系统进行,天缘稍后文章会有所涉及)
使用方法如下(示例):
1、在Eclipse中新建一个工程HelloJni,HelloJni.java中的代码可参考NDK对应 sample下的演示代码(android-ndk-r8b\samples\hello-jni\tests\src\com\example \HelloJniTest)调用方法。
2、将NDK编译项目目录下的jni和libs文件夹拷贝到新建工程目录下
注意这两个文件夹要和工程中的src和res文件在同一目录下。然后进入Eclipse中刷新工程(会看到多出两个文件夹)。
3、运行Eclipse项目,就可以在虚拟机上看到hello-jni.c函数中输出字符串。
4、后续您可以试着修改库源程序或项目JAVA程序来熟悉NDK整个开发过程。
本文参考:http://www.eoeandroid.com/blog-546458-2185.html