您的位置首页百科知识

“Android NDK ”是什么,在什么情况下使用?

“Android NDK ”是什么,在什么情况下使用?

Android 应用是在dalvik虚拟机中运行的。NDK可以让你使用本地代码语言来开发应用,比如说C/C++,这种方法对某些类型的应用的是有好处的,可以充分利用本地代码和在某些情况下加速代码的执行。

对于绝大多数的应用来说,使用NDK并不是一个明智的选择,作为一个开发者,我们需要衡量它所带来的好处和缺点。使用本地代码并不一定可以使性能得到优化,但是通常使得应用代码变得复杂。一般来说,我们将应用中关键部分的代码用C/C++写,而不能由于我们习惯于用C/C++开发而把所有的代码都用C/C++来实现。

有下面这些特点的应用可以考虑使用NDK:

1 独立的,不和其他应用有关系的

2 频繁占用CPU但是申请的内存空间不是很大的操作,像信号的处理,物体的模拟等等

简单的用C/C++重写我们的代码是不会带来很大的性能提升的。

在考虑是否采用本地代码开发的时候,要结合应用的实际需求并且看看Android 的framework层是否提供了我们需要的API,但是用NDK可以充分利用本地已经有的代码。

Android framework提供下面两种方法来使用本地代码:

1 在Android framework的框架下面开发应用,使用JNI的方法来使用NDK本地方法提供的API。这样的好处就是我们可以很好的利用的Android的framework提供的框架,但是需要编写本地具体实现的代码。这样的APK可以在Android 1.5及其之后的版本上面运行。

2 写一个本地的Activity,在本地代码中实现生命回调函数,AndroidSDk提供了

类,这个类可以方便的让你在你的本地代码中实现回调函数(OnCreate,OnPause),从而当这些事件发生的时候处理。

1、NDK是一系列工具的集合。

2、NDK提供了一份稳定、功能有限的API头文件声明。

3、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

4、NDK将使Android平台支持C开发的开端。

NDK使得在android中,java可以调用C函数库。我们都知道,java是半解释型语言,很容易被反汇编后拿到源代码文件,在开发一些重要协议时,我们为了安全起见,使用C语言来编写这些重要的部分,来增大系统的安全性。还有,在一些接近硬件环境下,相信大家都清楚C与java的优劣。顺带提一下:NDK并不能显著提升应用效率。why?我们都觉得C语言比起java来说效率要高出很多,一方面,随着jdk的不断更新,java的效率也随之提高;另一方面,即便使用C语言编码提高了应用效率,但是在java与C相互调用时平白又增大了开销。

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)。

3、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。

NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)

4、NDK将使Android平台支持C开发的开端。

NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。