Android Studio NDK环境配置及JNI使用方法(下)
前言
1.什么是JNI?
Java本地开发接口 英文全称是 Java native interface
jni是一个协议。这个协议用来沟通Java代码和外部的本地代码(c/c++),通过这个协议 ,Java代码可以外部的c/c代码 ,外部的c/c代码也可以 调用本地的Java代码。
由于java代码运行和执行都是基于虚拟机的。
了解一下JVM虚拟机
我们都知道:.java源文件都需要通过编译器来编译成.class文件,这里可以说字节码文件,然后在Dalvik虚拟机的解释器 编译成特定的机器识别码。从而达到在机器上能够运行。
java语言面向对象,一般会把方法封装到对象里面。
C语言面向过程。所谓面向过程就是做任何的时候都是一步一步来的。
java方法调用c/c方法是行不通的一般通过桥梁(jni)间接的调用c/c。相当于我们所说的中间人。通过jnijava即可以调用c代码,c代码又可以调用java代码。
java和c/c++之间的关系是:
java代码执行步骤:
其中,最常见的android系统中,java和c的调用实例:
JNI和NDK的区别:
Java和C/C互相通过的接口,是Java语言提供的Java和C/C相互沟通的机制,目的通过JNI可以实现java和调用本地的C/C代码,本地的C/C的代码也可以调用java代码。JNI 是本地编程接口。Java通过C/C使用本地的代码的一个关键性原因在于C/C代码的高效性。相互之间的调用。
NDK是一系列工具的集合。
它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。
这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。它可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
应用场景
-
可以复用c/c++d的优秀的框架
-
ffmpeg
- sfg 音视频播放等媒体的框架
-
7-ZIP 一个强大的压缩算法,效率比WRNR要更上一筹。
-
opencore. 视频播放(Android4.0直线视频播放)
-
可以提升效率
- java代码是跨平台的,不直接操作硬件。由有Dalvik虚拟机进行解释执行。而IOS对的objectC编程语言直接操作硬件。效率比较高。
- art 提高app运行效率
- c代码直接操作硬件,可手动操作去释放内存。
- 一些小游戏等
- 智能家电,车载电脑(obd:onboard debug system)
- c代码反编译比较困难,不容易调试
- java容易反编译,容易看懂,安全性较低
JNI开发工具
- dev-cpp.exe
- 轻量级开发工具
编译器gcc c99标准
如果大家之前学过C语言,会对dev-cpp.exe再熟悉不过了。但是小弟不猜,之前没有C的基础,所以在这个对于每一个细节都不想放过。 于是上网查了查其优点
用的优势:
- devcpp.exe是Bloodshed Dev-C++的界面主程序,用于开启该软件的WINDOWS界面程序。
- devcpp,体积小,但是功能强大。它包括多页面视窗、工程编辑器。
- 在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。
- 提供语法显示高亮,以减少编辑错误。
工具下载地址:
链接:http://pan.baidu.com/s/1o7GOPU6 密码:f3vb
/下******/
接下来,也会给大家整理Android Studio NDK环境配置及JNI使用方法,详情看博客