当我更改任何 .java 文件并构建时,编译需要 16 秒。我不明白为什么它应该这么慢!?
我为 Andoroid 启用了详细输出。
Window > Preferences > Android > Build output > Verbose.
结果输出(Console > Android)是:
[19:46:10] Refreshing resource folders.
[19:46:10] Starting incremental Pre Compiler: Checking resource changes.
[19:46:10] Nothing to pre compile!
[19:46:10] Starting incremental Package build: Checking resource changes.
[19:46:10] ignored resource ...\bin\.\classes.dex
[19:46:10] processing ...\A.class
[19:46:10] processing ...\B.class
...
[19:46:21] processing com/google/inject/util/Providers.class...
[19:46:21] processing com/google/inject/util/Types.class...
[19:46:24] Using default debug key to sign package
[19:46:24] Packaging ...\bin\resources.ap_
[19:46:24] Packaging classes.dex
...
[19:46:25] Packaging ...\annotations.jar
[19:46:25] Build Success!
[19:46:25] Refreshing resource folders.
[19:46:25] Starting incremental Pre Compiler: Checking resource changes.
[19:46:26] Nothing to pre compile!
.class 文件的“处理”耗时 14 秒。它“处理”了所有文件,甚至来自所有链接的 .jar 文件。我认为这里出了点问题,因为只更改了一个 .java 文件。
如何提高编译速度?
最佳答案
我认为这里有一个误解。正如您所说,只有修改后的类被重新编译(Eclipse 在几毫秒内);然而,在那之后,ADT 插件获取每个编译的类并通过 dx 工具将其转换为 Dalvik 的字节码格式。此过程的输出是单个文件 classes.dex,其中包含应用程序中的所有类,包括来自引用库的类。最后一个“翻译”步骤需要更长的时间,因为它的优化确实很差:ADT 插件不缓存任何内容,它只是在每次构建时重新翻译每个类(而且速度非常慢)。对于大中型项目,这真的很令人沮丧……我希望 Google 能在未来的 ADT/SDK 版本中改进这一点。
关于Android编译慢(使用Eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883635/