在IntelliJ IDEA中加速Android项目构build时间

我想知道,如果有任何方法,如何在Eclipse和ADT中设置在IntelliJ IDEA skip packaging and dexing 。 在IntelliJ Preferences Additional VM Options中的Android DX编译器部分有一个Additional VM Options字段,也许这可能是一个方法,如何设置它。 我也将欣赏另一个提示,如何加快IntelliJ Android项目build设。

Solutions Collecting From Web of "在IntelliJ IDEA中加速Android项目构build时间"

在Eclipse首选项中,您所指的skip packaging and dexing的完整名称是“ Skip packaging and dexing until export or launch. (Speeds up automatic builds on file save) Skip packaging and dexing until export or launch. (Speeds up automatic builds on file save) ,这是自从ADT 12以来增加的一个function,以解决Eclipse增量编译问题(这会减慢Eclipse的开发),请查看修订版12.0.0(2011年7月)以及此链接更多细节请注意,无论您使用哪个IDE(或非),打包和分解是debugging/运行项目时的基本步骤。 在这里输入图像说明

正如CrazyCoder在他的评论中所提到的那样 ,默认情况下IntelliJ不支持类似Eclipse的渐进式编译和Problems窗格 ,换句话说,当文件改变时它不会自动编译你的项目。 所以这真的不是一个问题,也没有IntelliJfunction。

你的构build过程瓶颈可能来自其他地方。 AFAIK在一个中等规模的项目中,花费最多的时间是编译资源(AAPT命令,查看构build过程图 )。 一些来自xdadevelopers的聪明人find了瓶颈,并创build了AAPT的修复版本:

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

我自己使用它,我会说Eclipse的速度提升是可以接受的,请注意,它只是提升了AAPT的一步,而不是包装ad dexing。 如果你使用InteliJ,它可能没有什么帮助,因为它不需要经常编译这个项目。

我正在使用IntelliJ 12.我赢得了时间部署和运行Android应用程序使IntelliJ“自动生成项目”。 要启用它,只需进入首选项 – > 编译器,然后选中“自动生成项目”。 在同一窗口中选中“并行编译独立模块”。

启用“自动生成项目”允许您在Android应用程序启动之前跳过“制作”任务。 您可以在“运行/debuggingconfiguration”中将其删除,select您的Android应用程序,并在“启动之前”部分删除“制作”任务。

我没有解决scheme,但是我解释了为什么Eclipse和IntelliJ之间的编译时间差异很大。 因为有。 无论何时您依赖于外部模块或库: IntellIJ总是DEX依赖模块 。 Eclipse似乎在caching它们。

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

项目设置

  • Eclipse中新的Android应用程序模板的Hello World项目。
  • 依赖于AndEngine开源Android游戏引擎项目*。
  • Eclipse:将 AndEngine项目定义为“Android库”。 在“Java构buildpath/项目”选项卡下的“Android”选项卡和“必需的项目”下添加为“参考”。
  • IntelliJ: AndEngine定义为“模块”。 设置为主模块HelloWorld的依赖项, 勾选导出checkbox(不是我认为重要的)。

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

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

然后,我在每个IDE中进行了以下更改并每次定时三次:

  • 答:只修改主模块中的日志行
  • A + B:修改主模块和AndEngine模块中的日志行。

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

结果:

IntellIJ与Eclipse的图表编译和部署时间

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

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

结论:

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

有时当我将大的外部JAR添加到我的(Eclipse)项目中时,似乎显着减慢了构build过程。

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

到目前为止,这一直解决了我的大型JAR-构build时间问题。 一些聪明人也向我解释了为什么这样,但不幸的是我不记得这个解释。 我没有IntelliJ的经验 – 我不知道这是否适用于你的情况,但是,你可能会从这里得到更多的想法…