Android JNI

it2024-11-28  38

Android JNI_OnLoad是如何被调用的

涉及文件流程如下

涉及文件

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函数,并且执行。
最新回复(0)