JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。
Application和Framework层使用的是java语言,libraries和kenel层使用的是C++&C语言
Android的底层,已经有了一个用C &C++写成的库或程序,而你希望在java程序中使用,就要用到JNI。
2、Java和C/C++是如何互通的?
其实不能互通的原因主要是数据类型的问题,jni解决了这个问题。
例如:C文件中的jstring数据类型就是java传入的String对象,经过jni函数GetStringUTFChars()的转化就能成为c的 char*。
2.1 基本数据类型
2.2 引用类型
3、底层的C、C++如何调用到Java?
在C/C++层为了获取Java层的对象、变量以及描述Java的方法,需要用字符串来描述需要获取对象的类名、变量类型以及方法
3、1 类描述符
规则就是将"com.xm.jni.MainActivity"中的“.”用“/”代替。
其中com.xm.jni是包名, MainActivity是对应的类名
3.2 数据类型描述符
应用类型的数据描述符。对于引用类型描述符是以"L"开头";"结尾
3.3 方法描述符
方法描述符,可以通过命令获取到 javap –s packageName.className
例如:javap -scom.xm.jni.MainActivity
附件:对应的源码例子