Android编译很慢(使用Eclipse)

时间:2010-05-21 16:03:09

标签: android performance compilation

当我更改任何.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文件被更改了。

我可以做些什么来提高编译速度?

6 个答案:

答案 0 :(得分:55)

我认为这里存在误解。如你所说,只重新编译修改后的类(Eclipse在几毫秒内);然而,在那之后,ADT插件会获取每个编译的类,并通过dx工具将其转换为Dalvik的字节码格式。此进程的输出是单个文件classes.dex,其中包含应用程序中的所有类,包括来自引用库的类。最后一个“翻译”步骤需要更长时间,因为它的优化效果非常差:ADT插件不会缓存任何内容,它只是在每次构建时重新翻译每个类(而且速度很慢)。对于中型到大型项目,这真的令人沮丧...我希望Google将在未来的ADT / SDK版本中改进它。

答案 1 :(得分:9)

另一种解决方法是:

  • 禁用Android Package Builder(右键单击项目#Properties#Builders)
  • 使用ant构建和部署apk

有关详细信息,请参阅android-workaround-for-slow-building-workspace-problem-in-eclipse

答案 2 :(得分:4)

ADT 21 pre-dex所有图书馆。这意味着定期编译只会重新设置项目的输出(更快),然后将结果与预定义的库合并(非常快)。

答案 3 :(得分:0)

增加Eclipse的可用内存似乎有很大帮助。尝试启动它:

eclipse -vmargs -Xms1024m -Xmx2048m

答案 4 :(得分:0)

正如alex2k8所述,我启用了详细输出。罪魁祸首是AdMob jar文件。

我正在使用ADT 22.0。我的应用程序包括AdMob,在运行或调试步骤中,admob jar中的类文件被转换为dex文件,这个文件非常慢。

我暂时从项目中删除了admob代码和jar,并且构建过程再次正常。

答案 5 :(得分:0)

每次保存,Eclipse包和dexing所有文件。但这不是必需的,因为每次保存时都不需要在apk中部署应用程序。

无论如何,这个问题的关键是取消选中选项:

“跳过包装和dexing直到导出或启动。(加快文件保存时自动构建。)”

“窗口 - >首选项 - > Android - >构建”

这将解决您的问题。

干杯