android ndk是什么,android sdk和ndk
1.前言
2009年6月26日,GoogleAndroid发布了NDK,引起了许多开发者的兴趣。NDK的全称:NativeDevelopmentKit。:http://developer.android.com/sdk/ndk/1.5_r1/index.html.
2.误解
新事物除了惊喜,也会给我们带来一些困惑和误解。
在谷歌搜索“NDK”,很多类似“安卓终于可以用C开发了”的标题,都是对安卓平台编程方式的误解。其实Android平台从诞生开始就支持C和C开发。众所周知,AndroidSDK是基于Java的,也就是说所有基于Android SDK开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能用Java”。AndroidSDK刚发布的时候,谷歌宣称其虚拟机Dalvik支持JNI编程,即第三方应用可以通过JNI调用自己的C动态库,也就是在Android平台上,始终可以实现“Java C”的编程方式。
当然,这种误解有其根源:在AndroidSDK文档中没有对JNI的帮助。即使第三方应用开发者使用JNI完成自己的C动态链接库(so)开发,so又怎么可能和应用一起打包成apk发布呢?还有技术上的障碍。我曾经花了很多时间安装交叉编译器来创建so,通过资产(资源)的方式,实现了捆绑的so发布。但这种方法只能取巧,没有官方支持。所以,在NDK出来之前,我们把“Java C”的开发模式称为灰色模式,即官方既没有声明“支持这种方式”,也没有声明“不支持这种方式”。
2.2.误解2:有了NDK,我们可以使用纯C开发Android应用程序。
AndroidSDK是用Java语言发布的,把很多C开发者排除在第三方应用开发之外(注:我们所有的讨论都是基于“第三方应用开发”,Android系统基于Linux,系统级开发肯定支持C语言。)。很多人误以为类似Symbian和WM的NDK的发布,终于可以在Android平台上使用纯C和C开发第三方应用了!事实上,NDK文件明确指出:这不是一条好路。因为NDK不提供各种系统事件处理支持,也不提供应用程序生命周期维护。另外,在此次发布的NDK中,并没有提供应用UI的API。至少目前用纯C和C开发一个完整的应用的条件还不完全。
3.什么是NDK?
粗略研究了NDK之后,我对“什么是NDK”的理解如下:
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)和日志库(liblog)。
4.NDK带来了什么?
1)随着ndk的发布,“Java C”的开发模式终于转正,成为官方支持的开发模式。
利用NDK,我们可以用C开发要求高性能的应用逻辑,从而提高应用执行的效率。
使用NDK,我们可以用C开发需要保密的应用逻辑。毕竟Java包是可以反编译的。
NDK促进专业so组件供应商的出现。(乐观猜测,要看安卓用户数量)
2)NDK将是Android平台支持C开发的开端。
NDK提供了一套开发工具,方便开发者开发和发布C组件。同时,Google承诺在NDK的后续版本中提高“可调”能力,即提供远程gdb工具,以便我们方便地调试C源代码。在支持Android平台的C开发上,我们可以感受到Google花了很大的精力,我们有理由期待“C组件支持”只是GoogleAndroid平台C开发的开始。毕竟C程序员还是码农阵营的绝对主力。将这些人排除在Android应用开发之外,显然不利于Android平台的繁荣。