28

我想知道,如果有任何方法,如何skip packaging and dexing在 IntelliJ IDEA 中设置,如在 Eclipse 和 ADT 中。Additional VM OptionsIntelliJ 的 Android DX Compiler 部分中有字段Preferences,也许这可能是一种方法,如何设置它。我也很欣赏另一个技巧,如何加快 IntelliJ Android 项目的构建。

4

4 回答 4

31

我正在使用 IntelliJ 12。我赢得了部署和运行 Android 应用程序的时间,使 IntelliJ 能够“自动制作项目”。要启用它,只需转到Preferences -> Compiler并选中“Make project automatically”。在同一窗口中选中“并行编译独立模块”。

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

于 2013-02-19T09:06:43.240 回答
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 的开发速度),请查看修订版 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,它可能没有多大帮助,因为它不需要经常编译项目。

于 2012-11-15T04:22:07.910 回答
11

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

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

项目设置

  • 来自 Eclipse 中的新 Android 应用程序模板的 Hello World 项目。
  • AndEngine开源 Android 游戏引擎项目的依赖*。
  • Eclipse: AndEngine 项目定义为“Android 库”。在 Android 选项卡下添加为参考,在 Java 构建路径/项目选项卡下添加所需项目。
  • IntelliJ: AndEngine 定义为“模块”。设置为主模块 HelloWorld 的依赖项,选中导出复选框(我认为这并不重要)。

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

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

然后,我进行了以下更改,并在每个 IDE 中对它们中的每一个进行了 3 次计时:

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

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

结果:

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

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

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

结论:

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

于 2013-04-29T15:20:34.020 回答
0

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

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

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

于 2012-11-16T13:33:19.403 回答