当我更改任何.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文件被更改了。
我可以做些什么来提高编译速度?
答案 0 :(得分:55)
我认为这里存在误解。如你所说,只重新编译修改后的类(Eclipse在几毫秒内);然而,在那之后,ADT插件会获取每个编译的类,并通过dx工具将其转换为Dalvik的字节码格式。此进程的输出是单个文件classes.dex,其中包含应用程序中的所有类,包括来自引用库的类。最后一个“翻译”步骤需要更长时间,因为它的优化效果非常差:ADT插件不会缓存任何内容,它只是在每次构建时重新翻译每个类(而且速度很慢)。对于中型到大型项目,这真的令人沮丧...我希望Google将在未来的ADT / SDK版本中改进它。
答案 1 :(得分:9)
另一种解决方法是:
有关详细信息,请参阅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 - >构建”
内这将解决您的问题。
干杯