您的位置 首页 java

无限互联:JNI和NDK实现JAVA和C/C++之间的相互调

在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用。今天无限互联Android培训的老师为各位同学带来关于“JNI和NDK实现JAVA和C/C++之间的相互调用”的一些技术心得。

Java Native Interface
(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在 Java 虚拟机
(VM)内部运行的 Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。

由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM:
Virtual
Machine)来执行。在执行Java类的过程中,如果Java类需要与C组件沟通时,VM就会去载入C组件,然后让Java的函数顺利地调用到C组件
的函数。此时,VM扮演着桥梁的角色,让Java与C组件能通过标准的JNI介面而相互沟通。

在实际应用中这两者之间的调用关系可以归纳为以下四种方式:

1. 在应用的JAVA代码中调用NDK中C/C++实现的函数。

2. 在NDK开发中的C/C++代码调用应用中JAVA类的静态函数。

3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。

4. 在NDK开发中的C/C++代码调用应用中JAVA类新建实例的函数。

无限互联:JNI和NDK实现JAVA和C/C++之间的相互调用

安卓应用程序调用NDK(cc++代码库)方法

安卓NDK的开发实际上是安卓应用程序(Java代码)调用cc++代码库的开发。具体开发步骤如下:

1. 在NDK工程目录下的apps文件夹下新建Eclipse的安卓工程,并在工程中设计需要用cc++实现的JNI接口。 B. 设计完成后利用Javac、Javah两个命令将定义好的JNI接口文件编辑成.h的cc++头文件。

2. 在项目根目录下创建jni文件夹,将上一步生成的头文件复制到jni文件夹下。

3. 利用Eclipse的CDT建立一个C工程,并指定创建目录为上一步的jni文件夹,在工程中新建一个与JNI接口文件名相同的.c文件,用来实现接口。(此步也可以在记事本下完成)

4. 用cc++代码实现了JNI接口后,使用Cygwin工具将.c文件一步一步编辑成.so库文件。编辑完成后.so文件会被添加到libsarmeabi路径下。

5. 至此在Eclipse的安卓工程装载.so文件后,便可调用cc++代码的本地库文件。

JNI,是Java Native Interface的简称,中文是“Java本地调用”。通过这种技术可以做到以下两点:

Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。

Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数。

javah工具的用法

按照C/C++头文件来编写C/C++源文件

将C/C++源文件编译成动态连接库(DLL)

在Java程序中引入动态连接库等知识

JNI并不是什么特别神奇的东西,当初SUN推出它的目的是为了屏蔽不同操作系统平台的差异性,通过Java语言来调用Native语言的功能模块,避免重复制作车轮,最主要是这两个目的。

最简单的Java调用C/C++代码,有以下步骤,童鞋们最好详细阅读,避免出现相应的错误:

首先在Java类中声明一个native的方法

使用Javah命令生成native方法的声明的C/C++头文件

按照生成的C/C++头文件来编写C/C++源文件

将C/C++源文件编译成动态链接库(DLL)

将DLL文件加入到PATH环境变量下

Java类中加载DLL,然后调用声明方法

Android培训机构首选无限互联Android培训,Android培训引领者,专注Android培训,用心做靠谱的Android培训机构。

文章来源:智云一二三科技

文章标题:无限互联:JNI和NDK实现JAVA和C/C++之间的相互调

文章地址:https://www.zhihuclub.com/174803.shtml

关于作者: 智云科技

热门文章

网站地图