在运行单元测试时将Android Gradle插件从3.5.3更新到3.6.1后出现OutOfMemoryError

时间:2020-03-14 09:20:52

标签: android android-studio android-gradle-plugin

从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

到目前为止,我尝试过的是:

  1. 尝试玩一些gradle标志。但是到目前为止,还没有运气。

    • android.enableGradleWorkers = true / false
    • kapt.use.worker.api = true / false
    • kotlin.parallel.tasks.in.project = true / false
    • android.useCompileClasspathLibraryRClasses = false
  2. 使用一些testOptions标志(https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html),例如forkEvery,maxParallelForks。但是我不确定是否会有帮助,因为失败发生在构建短语上。

    我正在尝试获取堆转储,但这有点困难,因为OOM是随机发生的。

    我的设置:

    • 版本版本:6.2.2
    • Android Gradle插件:3.6.1
    • Android SDK Build-Tools 28.0.3 然后,我通过命令行工具运行单元测试。它不应该与AS相关。

如果任何人提出建议的解决方案或研究方向,我们将不胜感激

1 个答案:

答案 0 :(得分:0)

仅提供您的信息。我也必须在这里用谷歌触发一个问题 https://issuetracker.google.com/u/1/issues/151460310