代码之家  ›  专栏  ›  技术社区  ›  alex2k8

Android编译速度很慢(使用Eclipse)

  •  33
  • alex2k8  · 技术社区  · 14 年前

    当我改变.java文件和构建时,编译需要16秒。我不明白为什么这么慢!?

    我为android启用了详细输出。

    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 回复  |  直到 10 年前
        1
  •  55
  •   lencinhaus    14 年前

    我想这里有个误会。正如您所说,只有修改过的类才被重新编译(通过Eclipse在几毫秒内完成);但是,在这之后,ADT插件将获取每个编译的类,并通过dx工具将其转换为dalvik的字节码格式。这个过程的输出是一个名为classes.dex的文件,它包含应用程序中的所有类,包括来自引用库的类。最后一个“转换”步骤需要更长的时间,因为它的优化非常差:ADT插件不缓存任何东西,它只是在每次构建时重新传输每个类(这是非常缓慢的)。对于大中型项目,这会让人非常沮丧…我希望谷歌在未来的ADT/SDK版本中能够改进这一点。

        2
  •  9
  •   oae    13 年前

    另一个解决方法是:

    • 禁用Android软件包生成器(右键单击项目属性生成器)
    • 使用Ant构建和部署APK

    看见 android-workaround-for-slow-building-workspace-problem-in-eclipse 详情

        3
  •  4
  •   Xavier Ducrohet    12 年前

    ADT 21预索引所有库。这意味着常规编译只对项目的输出重新编制索引(更快),然后将结果与预编制索引的库(相当快)合并。

        4
  •  0
  •   iceheart    12 年前

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

    eclipse -vmargs -Xms1024m -Xmx2048m
    
        5
  •  0
  •   Vysakh Prem    11 年前

    正如Alex2K8所提到的,我启用了详细输出。罪魁祸首是admob jar文件。

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

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

        6
  •  0
  •   Marco HC    10 年前

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

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

    “在出口或上市之前,跳过包装和Dexing。(加快文件保存时的自动生成速度。)

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

    这可以解决你的问题。

    干杯