课程介绍
在一些Android应用的开发中,需要通过JNI和Android 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类新建实例的函数。