После обновления для использования Android Gradle Plugin 3.6.1 из 3.5.3 наш модульный тест постоянно получает исключение OutOfMemoryError.
Это журналы cra sh:
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. И крэ sh происходит в этой строке кода: 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
Пока что я попробовал:
Попробуйте играть с какими-то флагами. Но пока нет удачи.
- android .enableGradleWorkers = true / false
- kapt.use.worker.api = true / false
- kotlin .parallel.tasks.in.project = true / false
- android .useCompileClasspathLibraryRClasses = false
Поиграйтесь с некоторыми флагами testOptions ( https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html), например forkEvery, maxParallelForks. Но я не уверен, что это поможет, потому что сбой происходит в фразе здания.
Я пытаюсь получить heapdump, но это довольно сложно, потому что OOM происходит случайно.
Мои настройки :
- Версия Gradle: 6.2.2
- Android Плагин Gradle: 3.6.1
- Android SDK Build-Tools 28.0.3 И я запускаю модульный тест с помощью инструмента командной строки. Это не должно быть связано с AS.
Буду очень признателен, если кто-нибудь из вас предложит какое-либо решение или направление для расследования