从3.5.3更新为使用Android Gradle插件3.6.1之后,我们的单元测试不断随机产生OutOfMemoryError异常。
这些是崩溃日志:
Caused by: com.android.ide.common.workers.WorkerExecutorException: 1 exception was raised by workers:
java.lang.OutOfMemoryError
at com.android.ide.common.workers.ExecutorServiceAdapter.await(ExecutorServiceAdapter.kt:108)
at com.android.ide.common.workers.ExecutorServiceAdapter.close(ExecutorServiceAdapter.kt:118)
at kotlin.io.CloseableKt.closeFinally(Closeable.kt:53)
at com.android.build.gradle.internal.res.GenerateLibraryRFileTask.doFullTaskAction(GenerateLibraryRFileTask.kt:120)
at com.android.build.gradle.internal.tasks.IncrementalTask.handleIncrementalInputs(IncrementalTask.kt:107)
at com.android.build.gradle.internal.tasks.IncrementalTask.access$handleIncrementalInputs(IncrementalTask.kt:64)
at com.android.build.gradle.internal.tasks.IncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:73)
作为我的调查。 AGP 3.6.x更改了生成R文件的方式。崩溃发生在以下代码行中: https://android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/res/GenerateLibraryRFileTask.kt#120
到目前为止,我尝试过的是:
尝试玩一些gradle标志。但是到目前为止,还没有运气。
使用一些testOptions标志(https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html),例如forkEvery,maxParallelForks。但是我不确定是否会有帮助,因为失败发生在构建短语上。
我正在尝试获取堆转储,但这有点困难,因为OOM是随机发生的。
我的设置:
如果任何人提出建议的解决方案或研究方向,我们将不胜感激