跟踪了Android12的代码,他们2个函数最后都会调用nativeLoad这个函数,但是参数不一样。
load:
[Java] 纯文本查看 复制代码 String error = nativeLoad(filename, fromClass.getClassLoader());
后者是:[Java] 纯文本查看 复制代码 String error = nativeLoad(filename, loader, callerClass);
也就是callerClass多了这个。
https://aosp.app/android-12.0.0_ ... g/Runtime.java#1086
但是最后他们都是调用了同一个函数:
[Java] 纯文本查看 复制代码 1120 private static String nativeLoad(String filename, ClassLoader loader) {
1121 return nativeLoad(filename, loader, null);
1122 }
1123
1124 private static native String nativeLoad(String filename, ClassLoader loader, Class<?> caller);
nativeLoad三个参数的,只不过load函数传递了caller为null。
至于区别,就要到c++里面看实现了。
https://aosp.app/android-12.0.0_ ... native/Runtime.c#80
这里就是:[C++] 纯文本查看 复制代码 JVM_NativeLoad(env, javaFilename, javaLoader, caller);
如果继续挖,就只能追JVM_NativeLoad这个函数。根据这个思路一直往下追就可以了。我要搬砖了。
|