jni函数的注册:java层的native函数是怎么和jni层函数关联的;
1.静态注册:java层的具有native函数的类,通过javah会生成一个对应的类.h头文件,这个头文件就包含了jni层的对应的java层的native方法,这个类.h文件在c++中对应一个类.cpp文件,这个类.cpp文件是真正的实现,而类.h只是声明方法。
注册完之后,在调用java层的native方法时,会根据方法所在的包名+类名+方法名 到 jni 方法库中查询。匹配之后就会把jni方法的指针指向java层的native方法。
2.动态注册:从静态注册中可以看到注册完之后,需要到jni库中根据包名+类名+方法名 去查询,这种方式无法比较慢。动态注册是通过对java层的java类进行javah生成这个类以及类中方法/变量对应的签名,jni利用数组的方式把方法的签名和本地jni方法一一对应,方到数组中,然后到AndroidRuntime中注册。
网友评论