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