我有一个包含 30多个模块和子模块(功能基本模块)的项目。
我已经读到,多模块项目的构建时间少于单个模块项目的构建时间,因为它的时间少于10个模块(基本层模块)。但是,当模块数量增加时,会影响Android Studio的索引/构建/同步时间。此外,在开发多模块项目期间,Android Studio占用大量CPU和内存。
我应该如何优化构建速度和Android Studio性能?
注1:模块依赖项之间存在复杂的关系。
注2:已启用Gradle并行,并且我已检查Google Optimize your build speed
答案 0 :(得分:0)
我遇到了和你一样的问题。我通过使用自定义gradle依赖关系解析解决了我的问题。
这个想法很简单,我将所有模块发布到存储库(在我的情况下是人工工厂),然后在我依赖于已发布模块的build.gradle
文件中。为了在开发过程中将发布的依赖关系从本地发布切换为本地,我使用gradle依赖关系解析来解析为本地版本。
def loadedModules = [:]
getSubprojects().forEach {
loadedModules.put(it.name, it.path)
}
def group = 'np.com.susanthapa.efficientmultimodule'
allprojects {
repositories {
mavenLocal()
google()
jcenter()
// replace configurations for all modules
configurations.all {
// get our own dependencies
resolutionStrategy.dependencySubstitution.all { dependency ->
if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == group && loadedModules.containsKey(dependency.requested.module)) {
def targetProject = findProject(loadedModules.get(dependency.requested.module))
if (targetProject != null) {
dependency.useTarget targetProject
}
}
}
}
}
}
然后,您可以做的是从项目中卸载除app
模块之外的所有模块,并从settings.gradle
文件中注释掉所有模块。
现在要在特定模块上工作,只需在settings.gradle
中取消注释该特定模块,然后在android studio中加载该模块即可。上面的代码将确保在整个项目中都使用已加载模块的本地版本。这样可以减少构建时间以及android studio索引编制。
有关更多信息,请参见博客文章的link。
答案 1 :(得分:0)
遵循link you posted中的配置步骤。
除此之外,或者为了进行更快/更简单的正式分析,您可以将--scan
选项与./gradlew
构建一起使用,并检查在线发布的统计信息。
可以根据这些结果调整内存使用量,这可以为您带来巨大的好处。就个人而言,我已经看到由于内存不足,构建实际上需要花费几分钟来进行垃圾收集。
您还可以根据这些结果增加可用于Android Studio的内存。 Help->Edit custom VM options
。但是我要指出的是,您首先看到在命令行(./gradlew
)上有所改进。