天天看点

jni小记

读[深入理解Android卷一 全文-第二章]深入理解JNI小记

注册方式:

静态注册:依赖固定的命名规则(class_methodName),使用时才去寻找指针并保存

动态注册:依赖JNI数据结(JNINativeMethod保存java和native之间的关系

加载时机:System.loadLibarary(该函数多次重复加载相同的so库不会导致耗时正相关增加)

注册时机:System.loadLibarary之后调用的JNI_OnLoad函数

数据类型:参照下表,主要需要注意基本数据类型的字长变化

方法增加的参数:jobject/jclass 表示调用该native函数的java层对象或者class对象

JavaVM:进程唯一,可以获取每个线程的JNIEnv对象

JNIEnv:线程相关,可操作java层对象和jobject对象,比如获取方法和获取成员变量

java和jni层类的对应关系:

object -》jobject

Field-〉jfieldId

method -》jmethodID

操作流程:通过JNIEnv可以获取到某个对象的方法或者成员变量的id,之后再调用JNIEnv相关的call或者set或者get相关的api做操作。