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带来什么
1、NDK 的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。
- 使用NDK
,我们可以将要求高性能的应用逻辑使用 C
开发,从而提高应用程序的执行效率。
- 使用NDK
,我们可以将需要保密的应用逻辑使用 C
开发。毕竟, Java
包都是可以反编译的。
- NDK促使专业
so 组件商的出现。(乐观猜想,要视乎
Android 用户的数量)
2、NDK 将是Android平台支持C开发的开端。
NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C
组件。
分享到:
相关推荐
Android Studio JNI/NDK 编程; 具体见博客: http://blog.csdn.net/q610098308/article/details/51313341
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
Android之so文件、JNI和NDK
Android NDK 开发时需要的 常用的JNI API
使用Android Studio + NDK进行JNI开发,博客中有详尽说明,可以参考 http://blog.csdn.net/u014316982/article/details/53081597
而本套教程正是在Android开发中的核心重点开发技术(JNI/NDK),我们知道,Android的底层是Linux且Java的性能并不如C/C++好,所以在开发一些需要超高性能的App的时候就需要通过JNI来直接调用Android底层框架所提供的...
网上有关在linux中讲android jni(ndk) eclipse开发环境的搭建的资料有很多,但大多都非常的繁琐,本来是简单的事情描述的却很复杂。下面结合我的实际把步骤写出来,其实很简单一步就可完成……
android JNI运行NDK编译成的可执行文件。 具体信息参考博客http://blog.csdn.net/csdn49532/article/details/50698666
AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。
android jni和NDK简单案例(.so库调用),下载文件,androidstudio上运用,最好时在模拟器上测试(只x86兼容)
传智博客主讲,android jni ndk相关视频。百度网盘地址分享。
NDK开发,适合Android开发入门教程,视频教程,快速上手
内容概要:公司技术分享PPT,介绍了Android JNI-NDK的基础知识 适合人群:具备一定编程基础,工作1-3年的研发人员
安卓app开发之Android JNI即NDK C语言开发教程,适合初学者
windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++).doc
人脸检测,检测人睁闭眼睛,可以判断是否疲劳驾驶,代码是androidStudio+opencv工程,并且带android下JNI通过NDK编译so库文件的功能。。
JNI和NDK的关系:在Android开发环境中,JNI是实现的目的,NDK是实现JNI的手段,即通过NDK实现JNI功能
android jni NDK 经典入门
Android NDK jni使用,包括java调用,脚本编写,和C++代码实现