JNI和NDK的详解(上)

前言

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开发工具

  1. dev-cpp.exe
  2. 轻量级开发工具

编译器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使用方法,详情看博客

猜你喜欢

转载自blog.csdn.net/chen_md/article/details/81123213