从命令行编译Android项目很慢

mav*_*mav 16 performance android compilation dex

我正在使用以下命令在OSX上从命令行编译我的(相当简单,只有5个文件和几百个LOC)应用程序:

ant debug

有用.但它运作缓慢:

BUILD SUCCESSFUL Total time:

26 seconds

这是为什么?即使我只更改一个java文件中的一行,也需要很长时间.大部分时间都花在dex舞台上(约20秒),这是AFAIK创建Dalvik字节码.但我的朋友也使用Eclipse在Windows上使用相同的项目,他说编译只需要一两秒钟就可以在他的机器上运行.有什么办法可以加快这个过程吗?

mav*_*mav 13

我终于找到了解决方案!这有点像黑客,但它确实有效.

首先,转到您的ANDROID-SDK/platform-tools目录,然后将dxapp 重命名为其他内容,dextool最后创建dx包含内容的新文件:

#!/bin/sh
shift
dextool --dex --incremental --no-optimize $@
Run Code Online (Sandbox Code Playgroud)

将"dextool"替换为您之前选择的名称.这将为每个dex调用添加(未记录的)--incremental属性,这将通过仅对在构建之间发生更改的类进行dexing 来大大减少构建时间.现在它看起来像这样:

[dx] Merged dex A (1 defs/11,3KiB) with dex B (359 defs/1253,2KiB). Result is 359 defs/1519,3KiB. Took 0,5s

0.5秒而不是20秒是一个巨大的差异!

编辑 - 几点评论:

  • 你必须在使用它之前至少编译一次你的项目,因为它使用以前的classes.dex文件
  • 使用除ant之外的其他Android工具链时,您可能会遇到问题

更新:

Google发布了SDK Tools 21.0,它使得上述调整过时,因为它确实支持pre-dexing.最后!

  • 嗨@mav,您能否澄清SDK Tools 21.0是自动执行此操作还是需要配置?我尝试更新到最新版本(21.1),但即使我只更改了一行,我的构建时间也没有明显减少.在Ubuntu上使用IntelliJ (5认同)