JNI与NDK-联系和区别完美解释

来源:互联网 发布:批处理安装软件 编辑:程序博客网 时间:2024/04/30 18:27

1. JNI(java native interface)

作为一名android app 开发人员, 必须了解JNI。 JNI 是jave应用程序和native C/C++(C/C++被称为native language)代码的桥梁。

用途一:目前很多公司现有的代码都是C/C++的,这些代码是多年的积累,运行效率高 安全性好。在开发android app的时候,直接写JNI借口,供java应用调用即可。方便快捷!

用途二:当遇到android framework 不支持的硬件设备时,必须开发JNI,来调用设备驱动(C/C++)。

比如我们做android DTV(数字电视),android framework不支持电视机的tuner(电视接收数字信号的硬件模块)的控制。要想用java应用实现频道搜索,就必须开发JNI,来控制使用tuner。

 

 

2. NDK (Native development kit)

NDK提供一系列的工具,帮助开发者快速的开发C/C++动态库。

 

二者究竟有何区别呢?

JNI是java调用native(C/C++)的桥梁,是java的特性,与android系统无关!在windows系统编写java代码时,同样会用到JNI来调用C/C++接口。

Native代码编译成动态库(*.so), 最后被放到了文件系统,供java层通过JNI调用。

 

NDK是google为开发者提供的一套native程序开发的工具,里面包含了一些常用的C/C++库(OpenGL ES2.0等),用户可以用这些库编写高效的native程序。

目前NDK的版本为r9(下载地址:http://developer.android.com/tools/sdk/ndk/index.html)

那么通过NDK开发的native代码,怎么应用到java应用层呢? 还是通过JNI接口!

那跟直接用JNI调用native C接口有何区别?(我自己都觉得好啰嗦。。。)

区别就是:NDK提供了一整套编译*SO库和打包的工具,它可以把*.so动态库打包到*.apk中。最后开发者发布的应用, 可以被其他用户拿来直接安装使用(前提是此用户安装了NDK),而JNI编程做不到这一点,其他用户想使用JNI开发的应用,必须把涉及到的*.so移植到文件系统,这就是最大的区别!
原创粉丝点击