Android NDK开发篇(二):NDK相关介绍

  学习Android开发的时候,总是听到有人提起NDK,究竟NDK是什么东西?

  在网上查了一下,有相关的说明:

  NDK全称:Native Development Kit。
    1、NDK是一系列工具的集合。
      * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
      * NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
      * NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

    2、NDK提供了一份稳定、功能有限的API头文件声明。
      Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

  也就是说,Android是支持用C、C++开发的。但不是说有了NDK之后,我们开发Android应用就可以完全抛弃Java,毕竟Android的SDK都是基于Java的。不过从NDK r5版本开始,Android完全支持C/C++开发应用。对于纯C/C++是否适合开发Android,这个还有待考证


  使用NDK的作用:
    1、支持Android应用Java+C开发
    2、提高代码的执行效率,Java编译出来的字节码在JVM上执行是边解析边编译的,效率会比C编译出来的机器码慢很多。C的执行效率会比Java高10~100倍
    3、屏蔽程序的逻辑实现。因为Java编译出来的字节码是可以反编译,而且现在Java的反编译工具特别强大,几乎可以看到100%的源码。而C编译出来的机器码只能反汇编,汇编代码超级难看懂,这个大家都知道的,从而保护了程序的逻辑实现,在很多商业项目都会用到

  NDK的缺点:
    1、NDK是本地实现的,对平台有一定要求
    2、NDK不像SDK有各种方便的UI、服务相关的类库,像消息事件的传递和监听

  Shamoo查过相关的资料,发现NDK不仅仅支持C/C++开发,还可以内联汇编(更加依赖平台),也就是说Android应用的开发支持Java + C/C++ + 汇编开发...很爽有木有!另外NDK除了JNI的接口外,还支持ASNI C和GNU C以及原生线程、OpenGL ES...学习Linux C开发的或者OpenGL ES开发的就爽了。

你可能感兴趣的:(android,jni,NDK)