我想知道,如果有任何办法,如何在Eclipse和ADT中设置IntelliJ IDEA中的skip packaging and dexing
。 IntelliJ Additional VM Options
中的Android DX编译器部分中有Preferences
个字段,也许这可能是一种方式,如何设置它。我还要感谢另外一些提示,如何加快IntelliJ Android项目的构建。
答案 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),打包/运行都是调试/运行项目的基本步骤。
正如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 的过程中花费了大量时间,所以这就是我发现这个问题的方法。然后我试图做一个更彻底和可重复的实验,这就是我发现的。
项目设置
*)我可以在这里使用任何模块,但这是一个很好的例子,因为它a)相当大,b)是一个Android模块,这意味着我必须将它作为一个Android项目链接,而不仅仅作为一个JAR链接 dbm 在上面的帖子中提示。
我在onCreate
的{{1}}方法(HelloWorld的启动活动)中添加了日志代码,它也在AndEngine中调用了一个方法,该方法也记录了一行。 (我修改了MainActivity.java
的构造函数以输出一行并从SoundManager
调用构造函数)。这使我能够看到应用程序何时完成部署并且它已正确部署。
然后我做了以下更改,并在每个IDE中将每个更改为三次:
我使用标准秒表进行手动计时,然后向上/向下舍入到最接近的秒。我在每种情况下做了三个时间并计算了算术平均值。
结果:
注意:我没有在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的经验 - 我不知道这是否适用于你的情况,不过,你可能会从这里获得进一步的想法......