3
像android.os.Looper
这样的系统类的字节码只是一个存根。例如,从android.os.Looper.loop()
android.jar
包含以下字节码:android系统类汇编
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内运行时是否发生了实际代码修补?
您的意思是android.jar中的任何类都不包含真实代码,并且它只有一堆存根让javac快乐?我在哪里可以找到运行时库(源代码和字节码)? – dacongy 2012-04-08 17:56:57
是的,它只是一个模拟jar来满足您对android API的编译时间依赖性。据我所知,如果没有真正的Android设备或模拟器,你就无法获得一个工作的jar包,因为它依赖于某些本地功能。 – Natix 2012-04-08 18:04:39
至于来源,你可以在这里浏览它:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/,或者你可以直接通过Eclipse中的Android SDK管理器。它位于API15节点下,但可与任何旧版API安装在一起。 – Natix 2012-04-08 18:06:05