深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

JNI的技术特点:

java能够调用native代码。
native代码能够调用java代码。
 
JNI的技术考虑:
实现java代码的平台无关型。
java语言发展初期使用C和C++代码,避免重复*的需要。
 
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
举例子说明:
MediaScanner.java文件
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)其中native_init()是native方法,是需要C和C++去实现的,
 
system.loadLibrary("medua_jni");为加载编译后的so文件。
 
那么对应java层要实现的代码就是:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

然后看看JNI层的实现:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
JNI层需要讲 java层的“.”转换为“_”
 
JNI的注册:
1静态注册:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
MediaScanner.java文件按照这种方式生成的JNI代码就是如下代码:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
静态注册是根据函数名建立java函数和JNI函数之间的关联关系的。
缺点:
1    需要通过javah来编译类里面含有native函数的class文件生成对应的jni代码
2    javah生成的名字过长了。
3    第一次调用native函数要根据函数名字来所有对应JNI层来建立关联关系。
 
动态注册:
JNINativeMedia的结构:

数据类型转换:
 
基本数据类型转换:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
引用数据类型转换:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
Java代码中中代码:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
对应JNI代码:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
java中的对象:MediaScannerClient对应JNI代码中的Jobject
仔细看代码出现多余的参数:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

JNIEnv
 
JNIEnv内部结构图:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
JNIEnv提供了一些JNI系统函数:
调用java函数;操作jobject对象等很多事情。
 
JNIEnv具有线程相关型:
每条线程对应的JNIEnv不能在其他线程中使用。
 
JNIEnv与JVM之间的关系:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

通过JNIEnv操作jobject
JNIEnv的成员变量和成员函数
 
成员变量:jfieldID
成员函数:jmethodID
如何获取JNIEnv的成员变量和成员函数呢:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
举例子:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
如何通过jfield操作jobject?
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

jstring
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
看下例子:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
类型标识表:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
其实java也提供对应的生成工具方便开发:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 

垃圾回收:
JNI中的引用:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 
对local reference的释放:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
对Global reference的释放:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)

JNI异常处理:
深入理解JNI(《深入理解android》(author : 邓凡平)读书札记)
 



转载于:https://www.cnblogs.com/androidsuperman/p/33953546236c83cbe49471dffa86c77b.html