2010-11-23 97 views
2

當我在Eclipse中編譯一個Android項目時,它不會生成任何Ant腳本或任何內容,所以我假設它使用Eclipse編譯器生成.class文件,並使用dx將這些文件翻譯爲.dex。所以這很好,我知道Eclipse編譯器與javac不同,不能更改。Android使用什麼編譯器,我可以改變它嗎?

但是,當我使用android生成build.xml文件時,我看到它引用了其他Ant文件,最終我能夠追蹤到javac的實際調用。所以我對此有幾個問題。

  1. 我是一個螞蟻新手。 <javac> Ant命令是否對應於由我的JAVA_HOME env變量引用的javac?或者是別的什麼?
  2. 當您在Eclipse中使用「導出應用程序」選項時,它是否仍然使用Eclipse編譯器?我會一直被迫在Ant和Eclipse中使用不同的編譯器嗎?
  3. 如果我更改build.xml文件並更改「編譯」目標,我可以指定我想要的任何編譯器嗎?

我真的不太關心我使用的編譯器,我只是好奇。我所追求的主要目的是確保我使用的是現代編譯器,並且我可以期待所有常見的優化(例如字符串文字的實習)。 我是否正確地承認這一點?

P.S.談到優化,dx做什麼比僅僅將一個字節碼轉換爲另一個更花哨?

回答

2

要回答的問題1,是的,它必須使用由JAVA_HOME引用的一個。證據是:我可以用Ant成功構建項目,我的JAVA_HOME設置爲c:\ dev \ tools \ JDK6_20。我的路徑包括c:\ dev \ tools \ JDK6_20 \ bin。

我暫時將JAVA_HOME設置爲不存在的c:\ dev \ tools \ JDK6_201。當我嘗試構建時,得到:

BUILD FAILED C:\ dev \ projects \ Eclipse \ AndroidWorkspace \ MapProject48 \ build.xml:390:無法找到javac編譯器; com.sun.tools.javac.Main不在類路徑中。 也許JAVA_HOME並不指向JDK。 它目前設置爲「C:\ dev \ tools \ JRE \ 6_20_64bit」

我不知道它從哪裏得到最後一行,我想它一定是我的JRE,因爲它出現在註冊表中。

我認爲,在回答你的大膽問題:編譯器是現代在你的JDK

1

我不是100%確定你在做什麼。但是,Android使用稱爲Dalvik的Java的修改形式。

Dalvik是基於註冊的,這對移動設備更好。

http://en.wikipedia.org/wiki/Dalvik_(software)

+2

源文件首先編譯爲java字節碼。據我所知,這是用你安裝的任何JDK完成的,而不是通過eclipse本身。然後通過android sdk工具(可能是dx)將java字節碼轉換爲Dalvik字節碼。 – 2010-11-23 18:25:46

+0

通常的做法是設置%JAVA_HOME%ant%ANT_HOME%的環境變量並將%JAVA_HOME%\ bin和%ANT_HOME%\ bin添加到您的路徑。據我所知,Eclipse沒有單獨的'javac'。它只是一個支持多種語言的IDE。您將%JAVA_HOME%設置爲您的JDK,而不是JRE – NickT 2010-11-23 18:31:12

2

javac的關於你的問題有關的DX,它不是過程的結束。當應用程序安裝在設備上時,會進行大量本地查找,以創建該設備運行環境特有的優化dex(ODEX)文件。

相關問題