2010-11-23 35 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)文件。

相关问题