启用 Android Studio 中的 R8 缩小器时出现 GC 超限错误

31
我正在使用 Android Studio 3.4 (Canary 9),当我构建我的应用时,它失败并显示以下错误:

Task :app:transformClassesAndResourcesWithR8ForDebug

R8 是一个实验性功能。如果您遇到任何问题,请使用 'Shrinker (R8)' 作为组件名称,在 https://issuetracker.google.com 上提交错误报告。您可以通过在 gradle.properties 中更新 'android.enableR8=false' 来禁用 R8。

AGPBI: {"kind":"warning","text":"Missing class: java.lang.instrument.ClassFileTransformer","sources":[{}],"tool":"D8"}

Task :app:transformClassesAndResourcesWithR8ForDebug FAILED

FAILURE: Build failed with an exception.

  • 失败原因:执行任务 ':app:transformClassesAndResourcesWithR8ForDebug' 失败。

GC 暂停时间超出限制

当我在 gradle.properties 中加入 android.enableR8=false 后,一切都正常了。
那么,我应该如何修复此错误而不必禁用 R8?因为我真的想测试 R8 的功能。

你有关于 org.gradle.jvmargs 的特定设置吗?还是使用默认值? - shadowsheep
在我的AS 3.3 R8上运行良好。 - shadowsheep
@shadowsheep 是的,它在AS 3.3上运行正常,但是当我升级后就不再工作了。顺便说一下,我没有使用任何自定义的JVM参数。 - nhoxbypass
所以,尝试调整内存设置,例如 org.gradle.jvmargs=-XX\:MaxHeapSize\=1024m -Xmx4608M 或更多。让我们看看它是否解决了问题。请告诉我。 - shadowsheep
1
@nhoxbypass我也遇到了相同的GC开销错误。你找到解决方法了吗? - chathura
2个回答

48

如你所说,你没有使用任何自定义的JVM参数,那么请尝试。

在你的gradle.properties文件中,尝试几个内存设置。例如,尝试设置

org.gradle.jvmargs=-Xmx4096m

根据评论部分的建议:

指定用于守护进程的JVM参数。

该设置对于调整内存设置特别有用。

org.gradle.jvmargs=-Xmx1536m

我在我的项目中使用了R8,一切都运行良好。


2
使用Gradle版本5.1.1(在gradle-wrapper.properties中)无法正常工作(即使将堆大小和Xmx设置为4 GB也不行),但是使用实际的5.4.1版本可以正常工作(仅将Xmx设置为2 GB也可以)。 - Petr Daňa
1
请确保使用 gradle.properties 而不是 gradle-wrapper.properties。 - pumnao
1
在我的Android Studio 3.5.2上能正常使用。这还提高了我所有项目构建的速度。 - Nicholas
1
在使用com.android.tools.build:gradle:4.2.1构建Jenkins时无法工作。 - sinek
1
最终对我有帮助的是...非常感谢你挽救了我的一天。 - Gaurav Karia

2
有时增加JVM堆内存并不能解决问题,特别是在内存有限的系统上,这会引起其他问题。我的建议是尝试替换垃圾回收器。 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC GC超出限制是默认Java 8垃圾回收器(Parallel)抛出的异常。在我的情况下,这解决了问题。

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