Android编译很慢(使用Eclipse)

ale*_*2k8 33 performance android compilation

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

我为Andoroid启用了详细输出.

Window > Preferences > Android > Build output > Verbose.
Run Code Online (Sandbox Code Playgroud)

结果输出(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!
Run Code Online (Sandbox Code Playgroud)

.class文件的"处理"耗时14秒.它"处理"了所有文件,甚至是链接的所有.jar文件.我觉得有些不对劲,因为只有一个.java文件被更改了.

我该怎么做才能提高编译速度?

len*_*aus 55

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

  • 另外,您可以在"项目" - >"自动构建"中禁用自动构建.然后它只会在应用程序启动期间完全构建,因此在每次保存文件时处理代码时,它不会减慢Eclipse UI的速度. (7认同)
  • 禁用"自动构建"的问题是,我没有从资源获取更新的值.这留下了很多错误的空间,并使自动complition无用..然后当你最终构建它,你有错误,并不得不重新建立它,所以它不会节省太多时间 (4认同)
  • 保持自动构建但禁用后编译器(在Android> Build下的首选项中).这是你只禁用dexing阶段.只在你推出时它会按需完成. (2认同)

oae*_*oae 9

另一个解决方法是:

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

看到Android的解决方法换建设缓慢工作空间问题,在月食的细节