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

sea*_*kej 28 android build intellij-idea android-build dex

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

Jak*_*reu 31

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

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

  • 任何人都可以确认这部分答案适合您吗?>>"启用"自动创建项目"允许您在Android应用程序启动之前跳过"制作"任务." <<我切换到"使用外部构建"和"自动创建项目",但AFAIU如果在部署之前删除"Make",则您的类根本不会被dex-ed.这就是我发生的事情,旧的apk(一个没有变化)被部署和启动.试过IDEA 12和13 EAP. (7认同)
  • 我可以确认,不能简单地从运行配置中删除"Make"步骤.看起来旧的APK已执行,并且未反映新的更改.我在IntelliJ IDEA 13.0.1上. (3认同)

yor*_*rkw 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(2011年7月)和有关详细信息,请参阅此链接.请注意,无论您使用哪种IDE(或非IDE),打包/运行项目时都需要打包和dexing. 在此输入图像描述

正如CrazyCoder在他的评论中提到的,IntelliJ 默认情况下不支持类似Eclipse的渐进式编译和问题窗格,换句话说,它不会在文件更改时自动编译项目.所以这不是IntelliJ中的问题,也不是功能.

您的构建过程瓶颈可能来自其他地方.AFAIK在一个中型项目中,构建过程花费的最多时间是编译资源(AAPT命令,检查构建过程图).来自xdadevelopers的一些聪明人找到了瓶颈并创建了AAPT的修复版本:

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

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


Nil*_*zor 11

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

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

项目设置

  • Eclipse中的New Android Application模板中的Hello World项目.
  • AndEngine开源Android游戏引擎项目的依赖*.
  • Eclipse: AndEngine项目定义为"Android库".在Android选项卡下添加为Reference,在Java Build Path/Projects选项卡下添加Required Project.
  • IntelliJ: AndEngine定义为"模块".设置为主模块HelloWorld的依赖项,选中导出复选框(不是我认为这很重要).

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

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

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

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

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

结果:

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

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

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

结论:

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

  • 你说的很有意义,我看到了同样的事情:一个*非常*慢的DEXing阶段,在Eclipse内部的同一个项目中就可以了.也许您应该向JetBrains报告此错误,所有这些不错的图表和研究:) (3认同)