native调用流程
载入so库
static {
System.loadLibrary("test");
}
执行上述代码时,程序通过JVM载入这个libtest.so文件;与此同时它会产生一个load事件,促使程序会去这个so文件查找JNI_OnLoad函数
JNI_OnLoad函数由native的开发者实现,该函数主要提供的是版本信息和这个so库的所有函数索引
JVM拿到test这个so库的函数表会把他注册到自己内部的一个函数链表中去
//调用libtest.so里面的函数
String str = TestUtils.test();
- 调用so库函数,会去JVM的内部的函数链表去查找这个函数(如果不这样做,每次调用都会去so库中查找函数,显得很麻烦和低效)