几年前,当我第一次采用Gradle for Android(在Gradle 2.0之前)时,我发现使用并依赖于模块会有一些开销,所以我没有将我的项目分成更小的模块,而是创建了非常大的模块。在尝试了一些其他构建系统(例如Buck)之后,通过将代码分成多个小模块来获得性能。像Kotlin这样的一些现代编程语言甚至还有可见性修饰符,专门围绕将代码分割为模块的概念构建。
我们目前处于Gradle 2.14.1(差不多3.0),在过去的几个版本中,他们引用了大量的性能提升。在过去几年中对Gradle / Android插件进行了更改,现在它是否会生成更快的构建,以便将代码拆分为更小的模块,或者使用更少的大型模块?
答案 0 :(得分:2)
对于Gradle和Kotlin来说,最近整体构建的编译性能都有很大提升。包括降低构建中多个模块的开销。
您可以在最近的这篇文章中看到这些增加的一些示例:Kotlin vs. Java Compilation Speeds
通过结合Gradle的配置步骤减少了多个模块之间的开销,模块的速度更快,并且通过在内存中保留更多内容,以便不必在每次编译运行时重新加载,以及不编译细粒度依赖性检查认为不需要重新编译的东西。
以下是提示:
要为Gradle启用增量编译,需要将kotlin.incremental属性设置为true(例如,将行kotlin.incremental = true添加到项目根目录中的gradle.properties文件中)。 / p>
Android Studio 2.1启用了一项新功能:Dex In Process,可以显着提高全面清理构建的速度,并提高即时运行性能。
-x<task>
参数来Gradle。 现在,对于多模块构建或单个模块构建来说,它是否更快,我现在发现,没有改变的模块的开销可以忽略不计。对于那些拥有的,是正常的编译成本。
请注意,由于Android plugin for Gradle changing the classpath ordering between builds,渐进式编译在Gradle中的Android版本之间始终不起作用。虽然这在构建之间往往是一致的,但如果它重新计算类路径,它将是一个不同的顺序并导致新的完整构建。但无论您是单个还是多个模块构建,这都是一个问题。
您的问题的总体答案可能在项目,硬件,不同配置,人们的感知甚至是构建的误用和错误配置方面存在很大差异。鉴于上述改进,您必须决定花时间测试实际项目的当前状态 - 并亲自看看!