使用Android Studio 3.1编译时间过长

6

我正在使用 Android Studio v3.1。操作系统为 Windows 10,核心是 i5 处理器,内存有 16GB。 以下是构建分析的结果:

:app:transformClassesWithDesugarForDevelopmentQuickbuild 35.137s

:app:compileDevelopmentQuickbuildJavaWithJavac 31.917s

:app:transformClassesWithDexBuilderForDevelopmentQuickbuild 28.579s

:app:compileDevelopmentQuickbuildKotlin 20.145s

:app:transformClassesWithMultidexlistForDevelopmentQuickbuild 16.873s

:app:mergeDevelopmentQuickbuildResources 16.363s

:app:transformResourcesWithMergeJavaResForDevelopmentQuickbuild 7.958s

:app:transformNativeLibsWithMergeJniLibsForDevelopmentQuickbuild 6.483s

:app:processDevelopmentQuickbuildResources 4.835s

Projects gradle.properties中有以下配置

org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true
android.enableBuildCache=true
kotlin.incremental=true

即使只有一行代码的更改,构建仍需要至少2.3分钟的时间。这个问题只会在Windows操作系统上出现,在Ubuntu上配置相同的构建只需要15-20秒。 还有什么其他的方法可以减少构建时间吗?


你尝试过按照我在评论中提到的方法增加堆大小吗?我很好奇在Windows 16GB机器上修改堆大小会有什么影响... - Grigore Madalin
2个回答

1
在(Android Studio 3.1)中,在gradle.properties中添加以下2行代码:-
 android.enableD8.desugaring=true
 android.enableD8=true

另外,对于多dex,您可以添加。
 multiDexEnabled true

defaultConfig


部分地帮助减少了构建时间。 - Mangesh Kadam

1
我写下了所有常见的技巧。
在我的机器上,Windows与Linux之间的gradle竞争是由Linux赢得的。但是增加堆大小可能有助于缩短编译时间。
增加堆大小
从Android Studio 2.0开始,进程中的所有dex都在单个VM中运行,该VM还与gradle共享。这需要更多的内存来容纳所有内容。
在Windows下,默认的堆大小为1GB。您必须增加堆大小。您拥有的RAM越多,可以使用的RAM越多。
对于一个8Gb RAM的开发人员机器,我发现3GB堆大小是最好的选择。对于您的16GB机器,您可以自由地尝试更大的堆大小。
如何做呢?
在gradle.properties中添加以下行:
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

并行构建

(我看到你已经做了,但是我在这里提一下,让其他人也能看到。)

如果您的项目中有多个模块,请允许Gradle并行构建您的项目。

如何做到呢?

将以下行添加到您的gradle.properties文件中:

org.gradle.parallel=true

按需配置

(我看到你已经做过了,但我在这里提一下给其他人看。)

Gradle 提供了 — configure-on-demand 标志,它会告诉 Gradle 只构建它真正需要的组件。

基本上,它告诉 Gradle 仅配置与请求任务相关的模块,而不是配置所有模块。

这个设置通常适用于多模块项目,但请注意,您的项目中的库也可能受益于使用此标志。

例如,Google I/O 应用程序有两个组件 Android(包含与 Android 应用程序相关的源代码)和 Server(包含与后端服务器相关的代码)。使用默认的 graddle 设置时,它们都在编译时被配置。

如何操作?

将以下行添加到您的 gradle.properties 中:

org.gradle.configureondemand=true

...或访问“首选项”>“构建、执行、部署”>“编译器”,并检查“按需配置”选项。

启用Gradle守护进程

(我看到你已经做了,但是我在这里提一下,以便其他人阅读。)

Gradle运行在Java虚拟机(JVM)上,并使用几个支持库,需要非常重要的初始化时间。因此,有时启动速度可能会稍慢。解决这个问题的方法是Gradle Daemon:一个长期运行的后台进程,可以比否则情况下更快地执行构建。

您在第一次构建中看不到时间差异,但是在初始化gradle守护程序之后,构建时间将在后续构建中减少。

如果您正在使用3.0或以上版本的gradle,则默认情况下启用gradle守护程序。如果您正在运行旧版本,则未启用。

如何操作?

将以下行添加到gradle.properties中:

org.gradle.daemon=true

这些设置已经就位。我在问题中提到了相同的事情。 - Mangesh Kadam
你没有增加堆大小。这是在Windows上最重要的,正如我在评论中提到的那样。 - Grigore Madalin
1
尝试使用3072的值,但生成时间没有任何改变。 - Mangesh Kadam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接