在java代码中调用 System.loadLibrary(String fileName);
-> System.java - loadLibrary(String fileName);
-> Runtime.java - loadLibrary(String libName)
-> loadLibrary(String libName,ClassLoader loader);
ClassLoader通过调用VMStack.getCallingClassLoader() 得到,VMStack在package dalvik.system下 有hide标记,调用了package art.runtime.native 下的dalvik_system_VMStack.cc中的VMStack_getCallingClassLoader方法
-> doLoad(String name,ClassLoader loader);
-> nativeLoad(String fileName,Classloader loader,String ldLibraryPath);
ldLibraryPath 的获取调用 classLoader.getLdLibraryPath();具体实现在package dalvik.system的BaseDexClassLoader中getLdlibraryPath有hide标记,需要下载源码
nativeLoad();的具体实现在 art-runtime-openjdkjvm-Openjdkjvm.cc中
其中调用的LoadNativeLibrary(参数太多)的具体实现在java_vm_ext.cc中
看不懂c代码。。只能知道大致的调用流程是这样,先记录一下,等学一学c之后在接着分析详细过程