Android使用什么编译器,我可以更改它吗?

时间:2010-11-23 18:02:16

标签: java android eclipse compiler-construction

当我在Eclipse中编译Android项目时,它不会生成任何Ant脚本或任何东西,因此我假设它使用Eclipse编译器生成.class文件,并使用dx将其转换为。 DEX。这很好,我知道Eclipse编译器与javac不同,无法更改。

但是当我使用android生成build.xml文件时,我发现它引用了其他Ant文件,最终我能够追踪到javac的实际调用。所以我对此有几个问题。

  1. 我是蚂蚁新手。 <javac> Ant命令是否与我的javac env变量引用的JAVA_HOME相对应?还是别的什么?
  2. 当您在Eclipse中使用“导出应用程序”选项时,它是否仍然使用Eclipse编译器?我是否总是被迫在Ant中使用不同的编译器而不是Eclipse?
  3. 如果我更改build.xml文件并更改“编译”目标,我可以指定我想要的任何编译器吗?
  4. 我真的不在乎我正在使用的编译器,我只是很好奇。我要做的主要是确保我使用的是现代编译器,我可以期待所有常用的优化(例如字符串文字的实习)。 我假设这是正确的吗?

    P.S。说到优化,dx做什么比简单地将一个字节码翻译成另一个字节码更有意义吗?

3 个答案:

答案 0 :(得分: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。当我尝试ANt构建时,我得到:

建立失败 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中的javac一样现代

答案 1 :(得分:2)

关于你关于dx的问题,这不是流程的结束。当应用程序安装在设备上时,会进行大量本地查找以创建对该设备的运行环境唯一的优化dex(ODEX)文件。

答案 2 :(得分:1)

我不能100%确定你得到了什么。但是,Android使用称为Dalvik的修改形式的Java。

Dalvik是基于注册的,对移动设备更好。

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