Android编译很慢(使用Eclipse)

当我更改任何.java文件并构build时,编译需要16秒。 我不明白为什么它应该这么慢!

我为Andoroid启用了详细的输出。

Window > Preferences > Android > Build output > Verbose. 

结果输出(控制台> 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文件被改变了。

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

Solutions Collecting From Web of "Android编译很慢(使用Eclipse)"

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

另一个解决方法是:

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

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

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

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

 eclipse -vmargs -Xms1024m -Xmx2048m 

正如alex2k8提到我启用详细输出。 罪魁祸首是AdMob jar文件。

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

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

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

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

“跳过包装和德兴,直到出口或启动(加速文件保存自动构build)”

里面的“窗口 – >首选项 – > Android – >生成”

这将解决您的问题。

干杯