2017-09-15 58 views
0

我有一个有3个模块,它在Android Studio项目。 A,B,C A依赖于C和B取决于C. 我试图加快生成时间,我意识到,我每次执行assembleRelease/assembeDebug任务时间构建的所有模块。 每次我构建模块A时,只应该构建A和C,因为B在该任务中没有依赖关系,对吧? 我如何避免模块B每次构建模块A时构建?排除模块构建Android工作室

模块A的依赖关系:

dependencies { 
    compile project(path: ':c', configuration: 'release') 
    provided files('libs/some-lib.jar') 
} 

模块B的依赖关系:

dependencies { 
    compile project(path: ':c', configuration: 'debug') 
} 

模块C的依赖关系:

dependencies { 
    compile files('libs/other-lib.jar') 
} 
+0

你是如何运行的任务?通过命令行或通过Android Studio中的Gradle对话框? – jdv

+0

我跑离gradle这个对话框任务..从命令行和构建时间,现在的IM正在运行的任务减少了很多..显然gradle这个对话框建立的所有模块不管你正在试图建立 –

+0

正在发生的事情是,(如果你看看小心)从Android Studio运行子模块任务实际上是从项目的根目录调用任务。由于根通常包含所有的引用,因此它所配置的构建树包含所有模块。如果您启动运行子模块任务的Android Studio的第二个实例/窗口,只需创建一个基于该模块的构建树并且它是依赖关系。这很容易在Gradle日志中看到。 – jdv

回答

0

There is a bug in Android Studio:如果你使用的摇篮项目对话框运行的任务,这些任务将在根上下文中运行。也就是说,如果仔细观察,即使运行子模块任务,也可以在根级别运行相同的任务。

解决方案:

  1. 使用命令行摇篮或摇篮包装。
  2. 始终运行Android Studio中的两个实例(即,有多个项目打开)根settings.gradle文件中
+0

我开始从控制台使用如下命令构建:** gradlew a:assembleDebug ** ..构建时间减少了很多!谢谢 –

-1

简单(在这种情况下,B)移除相关模块的include语句应该从建立停止过Android Studio B,因为它会将其从整个Gradle项目中排除。该模块将保持完整,但是如果您打算修改其中的任何代码,则需要重新添加include语句。另请注意,修改settings.gradle文件需要Android Studio的Gradle Sync才能正常运行。

+0

这就像说你不希望模块B成为项目的一部分,这可能不是我们想要在这里做的。 – jdv

+0

这实际上取决于事情的结构是怎样的,这是一种自以为是的观点。对于我来说,如果模块目录是项目的根中,我一个也不会考虑从项目被删除,即使'''include'''声明被删除,它仍然存在,但它不活跃,因此会导致用更少的用量少构建这是OP – ahasbini

+0

是核心点,而Android工作室,至少在2.x中,removed_ _considers它。它甚至会问你是否要将它从模块列表中移除,并且它将以UI中的正常字体而不是粗体呈现。即使你不“删除”它,但将它保留在模块列表中,但是没有附加到主项目中,将会有各种问题。命令行中的Gradle可能仍然有效,但Android Studio中的同步和其他UI活动将永远不会看到该模块。此外,在团队设置中,这个文件是共享的,调整它会导致各种不必要的混淆。 – jdv