2008-10-23 55 views

回答

32

Dalvik無法處理或處理的方式與標準Java字節碼的處理方式有很多相似之處,儘管其中大部分都非常先進。

最嚴重的例子是運行時字節碼生成和自定義類加載。假設您想創建一些字節碼,然後使用classloader爲您加載它,如果該技巧適用於您的普通機器,那麼除非您更改字節碼生成,否則它將無法在Dalvik上運行。

這可以防止你使用某些依賴注入框架,最着名的例子是谷歌Guice(雖然我相信有人在這方面工作)。另一方面,AspectJ應該像使用字節碼檢測一樣編譯步驟工作(儘管我不知道是否有人試過)。

至於其他jvm語言 - 任何最終編譯爲標準字節碼並且在運行時不使用字節碼檢測的任何東西都可以轉換爲Dalvik,並且應該可以工作。我知道人們在Android上運行Jython,並且它工作正常。

要注意的其他事情是有不只是在時間編譯。這不是嚴格的Dalviks問題(如果您願意,您可以隨時編譯任何字節碼),但Android不支持這一點,並且不太可能這樣做。在標準Java的微基準測試毫無用處的情況下 - 組件在測試中具有不同的運行時特性,而不是大型系統的一部分 - Android手機的微基準測試完全有意義。

+6

幾個更新: 有一個特殊版本的Guice將在Android上工作。 http://code.google.com/p/google-guice/downloads/detail?name=guice-2.0-no_aop.jar 谷歌有一個團隊正在開發面向Android的JIT。 http:// groups。google.com/group/android-platform/browse_thread/thread/331d5f5636f5f532 – 2009-12-19 02:25:54

2

另外一個我猜測可以在這裏添加的事情是Dalvik在使用反射API列出類的字段時顯然不保留字段順序。現在,反射API無論如何都沒有做出任何保證(所以理想情況下你不應該依賴它),但大多數其他虛擬機在那裏保持順序。

-1

只是添加到對話中,而不是爲了恢復舊線程。我只是在搜索中遇到了這個問題,並且想補充說Jython不能與Dalvik一起使用。簡單地試圖做一個你好世界的例子將產生以下結果: