关于java的JNI和android的NDK释疑
来源:互联网 发布:宽带链接多重网络 编辑:程序博客网 时间:2024/05/16 01:08
安卓下jni和ndk到底有什么区别呢?不都是在android里调c/c++的东西?
jni 是 java 调用 native interface 的 功能 ,是 java的 特性
ndk 是 android 提供的 底层 开发包
NDK(Native Development Kit)“原生”也就是二进制
android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等
java调用这样实现就需要用JNI(Java Native Interface)
平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java,但都有统一的Java接口
而NDK的作用是“我们自己写本地代码”(C/C++),自己用JNI封装成Java接口
比如我们想做个计算,二这不是Java的强项,可以用C/C++来写实现,返回一个运算结果就行了
NDKr5已经实现了不用写一行Java代码开发程序了,只不过还是用到了虚拟机,细节被封装隐藏起来了而已
对于JNI和NDK很多Android开发初学者没有搞明白这个问题
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提供的库和函数功能很有限,仅仅处理些算法效率敏感的 问题,所以Android123推荐初学者学好Java后再学习JNI。
NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。
而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。
如果是做应用开发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?
其他至于实现,java调用本地C/C++函数,及其编写方式,我觉得JNI和NDK没有什么区别。
还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件,比如utils/Log.h
而后者的资源更多,当然NDK正在努力开发中,以便支持更丰富的接口。
- 关于java的JNI和android的NDK释疑
- 关于android ndk的jni总结
- 关于JNI和NDK 的区别
- JNI和Android NDK的使用
- JNI和Android NDK的使用
- Android中JNI和NDK的使用
- Android JNI和NDK学习(06)--JNI的数据类型
- Android JNI和NDK学习(07)--JNI的常用API
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- 关于Android开发中JNI/NDK使用的一点总结
- android JNI (NDK)的故事
- java jni和android java ndk
- 《关于ndk jni开发和so文件的生成》
- JNI和NDK的区别
- JNI和NDK的区别
- JNI和NDK的区别
- JNI和NDK的区别
- 引入JSON时,java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrderedMap解决方法
- Android NDK 开发
- LeetCode(152) Maximum Product Subarray
- 中国剩余定理。。。
- POJ 2068 Nim(博弈论+dfs)
- 关于java的JNI和android的NDK释疑
- hdu2544最短路
- 一招改变maven项目默认的编译级别
- 在Eclipse中反编译Class文件
- Android自定义控件之仿美团下拉刷新
- 数据库设计三大范式
- localstorage sessionstorage cookie的区别
- 杭电1266--数的倒叙
- HDU 2048 标准错排