jni和ndk详解
2013-12-19 10:17
211 查看
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正在努力开发中,以便支持更丰富的接口。
问:NDK 是什么
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
)。
使用NDK
,我们可以将要求高性能的应用逻辑使用 C
开发,从而提高应用程序的执行效率。
使用NDK
,我们可以将需要保密的应用逻辑使用 C
开发。毕竟, Java
包都是可以反编译的。
NDK促使专业
so 组件商的出现。(乐观猜想,要视乎
Android 用户的数量)
2、NDK 将是Android平台支持C开发的开端。
NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。
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正在努力开发中,以便支持更丰富的接口。
问:NDK 是什么
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
)。
问:NDK带来什么
1、NDK 的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。使用NDK
,我们可以将要求高性能的应用逻辑使用 C
开发,从而提高应用程序的执行效率。
使用NDK
,我们可以将需要保密的应用逻辑使用 C
开发。毕竟, Java
包都是可以反编译的。
NDK促使专业
so 组件商的出现。(乐观猜想,要视乎
Android 用户的数量)
2、NDK 将是Android平台支持C开发的开端。
NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。
相关文章推荐
- C#中foreach语句的迭代器实现机制
- 域名登陆等
- java传值的深入分析
- 恒大输给了拜仁,不丢脸
- Linux视频设备驱动常用控制命令使用说明
- AS3使用PrintJob实现单页或多页打印
- 【记录】Python中安装xlrd模块
- java调用系统程序
- iOS 7 ViewController Lifecycle
- windows mysql 自动备份的几种方法
- 网页源代码查看器
- HashMap源码
- jQuery中ajax的使用与缓存问题的解决方法
- mysql 无法启动时,告诉你一个比较二的秘密
- 独立开发者的自白:Objective-C最糟糕的13件事
- Android Camera 通过V4L2与kernel driver的完整交互过程
- 热键的实现
- 薛非《品悟C-抛弃C程序设计中的谬误与恶习》读后感part1【转】
- OpenCart之特色商品(Featured)模块教程
- launchpad openstack 注册并加入项目组