误解1:NDK 发布之前,Android不支持C语言进行开发
从android平台诞生的那一刻起,就意味着android能进行C/C++调用动态链接库进行开发,开发第三方应用的时候不一定必须使用Java语言进行开发,但是并不仅仅的限制于java语言来开发第三方应用,因为google曾今在自己的android帮助文档中声明,它的Dalvik虚拟机支持JNI的调用方式,也就是开发第三方应用的时候完全可以通过JNI的方式调用自己的C动态链接库,也就是说只要Dalvik虚拟机支持JNI的话,那么肯定能能实现java与C语言的交互编译。
误解的来源来自android的SDK文档中找不到任何关于JNI方面的帮助文档信息,即使第三方开发者使用JNI完成了自己的动态链接库(.so)的开发,那么.so文件怎么跟自己的APK一起打包并且发布呢?安装交叉编译器创建.so,并通过读取asset(资源的方式),实现so文件的捆绑发布,但是这种方式并非官方支持的方式,,所以NDK出来之前,我们将java+C的开发模式称为灰色开发模式,因为这种方式官方没有说支持,也没有说不支持。
误解2:有了NDK之后,我们可使用纯C进行第三方应用的开发Android应用
Android SDK采用java语言发布,把众多的C开发人员排除在外第三方应用之外(Android是基于Linux系统,系统级别肯定是支持C开发的),NDK文档明确说明:it's not a good way,因为NDK并没有提供各种系统事物处理支持,也没有提供应用程序生命周期的支持,应用程序也没有UI方面的API的支持,所以目前是用纯C进行第三方应用开发的条件还不举具备完整。
3.NDK==Native Development Kit NDK==一系列工具集合
NDK提供了一系列的的工具,帮助开发者快速开发C/C++动态链接库,并自动将so和java应用一起打包成APK,这些工具的提供简化了开发者的步骤。
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU,ABI,平台等差异,开发人员只需要简单的修改mk文件(指出哪些文件需要编译,编译性要求 等)就可以创建so
NDK将so与java应用一起打包成APK文件,极大的减轻了开发人员的工作。
4.NDK提供一份稳定的,功能有限的API头文件声明
google 明确声明API是稳定的,在后续的所有版本中都将会支持以前发布的API,目前的API版本功能非常有限,包含:
C标准库(libc),标准数学库(libm),压缩库(libz),Log库(liblog)
5.使用NDK带来的好处
使用NDK我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率
使用NDK我们将需要保密的应用逻辑使用C开发,毕竟java包都是可以进行反编译的
促使专业的so组件商的出现
6.NDK将是Android平台支持C的开端
NDK提供了一系列的开发工具集合,使开发人员能够便捷的发布C组件,同时google承诺将会提高NDK的可调试性能