NDK 和 JNI 总结

来源:互联网 发布:英语词汇量测试软件 编辑:程序博客网 时间:2024/06/05 11:11

1.原生开发工具包(英语:native development kit,简称NDK)

是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。

优势
由于基于虚拟机的语言在运行上比基于C语言或c++的效率低,因此通过NDK编译的原生程序不仅可以在特定的环境下工作,且能维持运行的高效率。并且通常只要硬件允许,NDK可以兼容任何C语言的库,因此在功能上弥补了一些SDK开发的不足。
劣势
虽然NDK的程序运行效率更高,但既然软件本身使用虚拟机语言开发一定在开发效率上有优势。因此相对而言在NDK上开发程序的难度比SDK上要高
原理

基于java的软件NDK通过JNI进行调度,由于java语言支持调用C/C++动态链接库,因此可以令java 的程序执行部分C语言代码,这为NDK的使用提供了可能。

为何要用到NDK?
        概括来说主要分为以下几种情况:
1). 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2). 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
3). 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。


2.JNI

是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。


0 0
原创粉丝点击