在IntelliJ IDEA中加快Android项目构建时间

时间:2012-11-11 21:32:55

标签: android build intellij-idea dex android-build

我想知道,如果有任何办法,如何在Eclipse和ADT中设置IntelliJ IDEA中的skip packaging and dexing。 IntelliJ Additional VM Options中的Android DX编译器部分中有Preferences个字段,也许这可能是一种方式,如何设置它。我还要感谢另外一些提示,如何加快IntelliJ Android项目的构建。

4 个答案:

答案 0 :(得分:31)

我正在使用IntelliJ 12.我已经赢得了部署和运行Android应用程序的时间,使IntelliJ能够“自动生成项目”。要启用它,只需转到偏好设置 - > 编译器并选中“自动生成项目”。在同一窗口中,选中“并行编译独立模块”。

启用“自动生成项目”允许您在Android应用程序启动之前跳过“生成”任务。您可以在“运行/调试配置”中删除它,选择您的Android应用程序并删除“启动前”部分中的“生成”任务。

答案 1 :(得分:11)

在Eclipse首选项中,您引用的skip packaging and dexing的完整名称是Skip packaging and dexing until export or launch. (Speeds up automatic builds on file save),这是自ADT 12以来添加的功能,用于解决Eclipse增量编译问题(这会降低Eclipse上的开发速度) ,查看Revisions 12.0.0 (July 2011)this link以获取更多详细信息。请注意,无论您使用哪种IDE(或非IDE),打包/运行都是调试/运行项目的基本步骤。 enter image description here

正如CrazyCoder在他的评论中提到的,默认情况下IntelliJ不支持Eclipse-like incremental compilation and Problems pane,换句话说,它在文件更改时不会自动编译您的项目。所以这在IntelliJ中确实不是问题也不是特色。

您的构建过程瓶颈可能来自其他地方。在中型项目中的AFAIK,构建过程花费的最多时间是编译资源(AAPT命令,签出build process diagram)。来自xdadevelopers的一些聪明人发现了瓶颈并创建了AAPT的修复版本:

http://forum.xda-developers.com/showthread.php?t=1907281

我自己使用它并且我会说Eclipse中的速度提升是可以用的,请注意它只会增加AAPT步骤,而不是打包广告dexing。如果你使用InteliJ,它可能没什么用,因为它不需要经常编译项目。

答案 2 :(得分:11)

我没有解决方案,但我解释了为什么Eclipse和IntelliJ之间存在巨大的编译时间差异。因为有。每当您依赖外部模块或库时: IntellIJ始终是DEX'es依赖模块。 Eclipse似乎在缓存它们。

我在其中一个项目中也经历过这种巨大的差异。我做了一些基本的计时测试,发现我在IntellIJ中用40秒构建的项目在Eclipse中只花了20个。在IntelliJ具有状态执行DEX 的过程中花费了大量时间,所以这就是我发现这个问题的方法。然后我试图做一个更彻底和可重复的实验,这就是我发现的。

项目设置

  • 来自Eclipse中新Android应用程序模板的Hello World项目。
  • 依赖于AndEngine开源Android游戏引擎项目*。
  • Eclipse: AndEngine项目定义为“Android库”。在Android选项卡下添加为Reference,在Java Build Path / Projects-tab下添加Required Project。
  • IntelliJ: AndEngine定义为“模块”。设置为主模块HelloWorld的依赖项,并选中导出复选框 (不是我认为这很重要)。

*)我可以在这里使用任何模块,但这是一个很好的例子,因为它a)相当大,b)是一个Android模块,这意味着我必须将它作为一个Android项目链接,而不仅仅作为一个JAR链接 dbm 在上面的帖子中提示。

我在onCreate的{​​{1}}方法(HelloWorld的启动活动)中添加了日志代码,它也在AndEngine中调用了一个方法,该方法也记录了一行。 (我修改了MainActivity.java的构造函数以输出一行并从SoundManager调用构造函数)。这使我能够看到应用程序何时完成部署并且它已正确部署。

然后我做了以下更改,并在每个IDE中将每个更改为三次:

  • 答:仅修改主模块中的日志记录行
  • A + B:修改了主模块和AndEngine模块中的日志记录行。

我使用标准秒表进行手动计时,然后向上/向下舍入到最接近的秒。我在每种情况下做了三个时间并计算了算术平均值。

结果:

Graphs of IntellIJ vs Eclipse compile and deploy time

注意:我没有在Eclipse中为“执行DEX”添加单独的子列,因为它只是在整个构建过程中输出“make”或“refresh workspace”。

从Eclipse运行时,您可以从数字中看到,当我只修改主模块时,我节省了时间 - 这是预期的。但在IntelliJ中,两种情况下的编译时间都相同!

<强>结论:

IntelliJ做了很多不必要的DEX'ing。如果有人知道这是否可配置,我想我们会解决认为是问题的根本原因。

答案 3 :(得分:0)

有时当我向我的(Eclipse)项目添加大型外部JAR时,它似乎显着减慢了构建过程。

但是,我注意到,不是像往常一样添加jar(Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...),而是可以添加用户库(Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> User Library),而是将外部JAR添加到此库中。

到目前为止,这始终解决了我的大型JARs构建时间问题。一些聪明的家伙也向我解释了为什么会这样,但遗憾的是我并不记得这个解释。我没有IntelliJ的经验 - 我不知道这是否适用于你的情况,不过,你可能会从这里获得进一步的想法......