当我在Eclipse中编译Android项目时,它不会生成任何Ant脚本或任何东西,因此我假设它使用Eclipse编译器生成.class文件,并使用dx
将其转换为。 DEX。这很好,我知道Eclipse编译器与javac
不同,无法更改。
但是当我使用android
生成build.xml
文件时,我发现它引用了其他Ant文件,最终我能够追踪到javac
的实际调用。所以我对此有几个问题。
<javac>
Ant命令是否与我的javac
env变量引用的JAVA_HOME
相对应?还是别的什么?build.xml
文件并更改“编译”目标,我可以指定我想要的任何编译器吗?我真的不在乎我正在使用的编译器,我只是很好奇。我要做的主要是确保我使用的是现代编译器,我可以期待所有常用的优化(例如字符串文字的实习)。 我假设这是正确的吗?
P.S。说到优化,dx
做什么比简单地将一个字节码翻译成另一个字节码更有意义吗?
答案 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是基于注册的,对移动设备更好。