android系统类编译

时间:2012-04-08 17:24:54

标签: java android compiler-construction dalvik

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中的运行时发生了?

1 个答案:

答案 0 :(得分:3)

编译代码的android.jar仅包含具有公共(常量)字段和公共方法的公共类,但所有这些方法都不包含任何实现。返回类型为void抛出“Stub!”的所有方法。 RuntimeException

具有实际实现的运行时库仅与您的应用程序在电话设备或模拟器中链接。