涉及文件
libcore/luni/src/main/java/java/lang/System.java
libcore/luni/src/main/java/java/lang/Runtime.java
art/runtime/native/java_lang_Runtime.cc
art/runtime/java_vm_ext.cc
流程如下
1. libcore/luni/src/main/java/java/lang/System.java
System.loadLibrary
2. libcore/luni/src/main/java/java/lang/Runtime.java
Runtime.loadLibrary(libName, VMStack.getCallingClassLoader())
3. art/runtime/native/java_lang_Runtime.cc
Runtime_nativeLoad
vm->LoadNativeLibrary(env, filename.c_str(), javaLoader, &error_msg)
4. art/runtime/java_vm_ext.cc
--> 1. dlopen
--> 2. dlsym
syn = dlsym(handle, "JNI_OnLoad");
JNI_OnLoadFn jni_on_load = reinterpret_cast<JNI_OnLoadFn>(sym);
int version = (*jni_on_load)(this, nullptr);
5. 上面就找到了so中的JNI_OnLoad函数,并且执行。