JNI与NDK
来源:互联网 发布:mac钥匙串访问在哪 编辑:程序博客网 时间:2024/06/05 15:09
最近做Android游戏,大部分都是Cocos2d-x引擎制作的,在Android客户端上就必须会涉及到JNI与NDK,那么这两者到底是什么呢?到底又有什么区别的?自己一直也是一知半解,现在就来慢慢的研究一下。
JNI是Java调用Native机制,是Java语言自己的特性全称为 Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用 JNI是是经常的,比如说读写Windows的注册表。
NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了功能有限的C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用。
NDK(Native Development Kit)“原生”也就是二进制
android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等
java调用这样实现就需要用JNI(Java Native Interface)
平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java,但都有统一的Java接口
而NDK的作用是“我们自己写本地代码”(C/C++),自己用JNI封装成Java接口
NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。
而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。
如果是做应用开发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?
其他至于实现,java调用本地C/C++函数,及其编写方式,我觉得JNI和NDK没有什么区别。
还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件,比如utils/Log.h
而后者的资源更多,当然NDK正在努力开发中,以便支持更丰富的接口。
用自己的理解就是JNI是Java的一种规范或者说一种机制,而NDK则是Android为了更方便用户打包so和apk而开发的一个工具集,提供了一些封装好的C++库,同时也使得Android使用本地C++代码开发更加方便。
- NDK与JNI
- [4] JNI 与 NDK
- JNI与NDK
- JNI 与 NDK
- JNI与NDK
- JNI与NDK
- JNI与NDK
- Android NDK Hello + JNI 与 NDK区别
- 【NDK开发】JNI与NDK关系
- android NDK开发之NDK与JNI
- Android NDK 与 Java JNI
- NDK 与 JNI 的关系
- NDK 与 JNI 的关系
- NDK 与 JNI 的关系
- NDK 与 JNI 的关系
- NDK 与 JNI 的关系
- NDK 与 JNI 的关系
- 安卓 NDK与JNI
- Xcode 5 单元测试(一)使用XCTest进行单元测试
- 修改listen监听的队列长度
- Handler和HandlerThread
- android系统启动过程
- jQuery 选择器的类型(学习笔记)
- JNI与NDK
- Windows 窗口层次关系
- tomcat本地测试,如何将127.0.0.1(localhost)地址进行自定义设置
- AngularJS 框架
- 和你的故事
- .netCHARTING报表图表控件
- JSR 356, Java API for WebSocket
- 游戏服务端通讯框架实现
- java中volatile关键字的含义