android系统类编译

问题描述 投票:0回答:1

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

java android android-source dalvik
1个回答
3
投票

您编译代码所针对的

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

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

© www.soinside.com 2019 - 2024. All rights reserved.