像android.os.Looper
这样的系统类的字节码只是一个存根。例如,android.os.Looper.loop()
中的android.jar
包含以下字节码:
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中的运行时发生了?
答案 0 :(得分:3)
编译代码的android.jar
仅包含具有公共(常量)字段和公共方法的公共类,但所有这些方法都不包含任何实现。返回类型为void
抛出“Stub!”的所有方法。 RuntimeException
。
具有实际实现的运行时库仅与您的应用程序在电话设备或模拟器中链接。