系统类(如android.os.Looper
)的字节码只是一个存根。例如,android.jar
中的 android.os.Looper.loop()
包含以下字节码:
public static final void loop();
Code:
0: new #2; //class java/lang/RuntimeException
3: dup
4: ldc #3; //String Stub!
6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V
9: athrow
但是在AOSP中,我可以看到执行消息分发的真实源代码(请参见 AOSP_ROOT/frameworks/base/core/java/android/os/Looper.java
)。那么这个类在Android系统中是如何处理的呢?真实的代码是在将系统的android.jar
编译成dex文件时打补丁还是在Dalvik VM运行时发生的?